将数据框的五列合并到两个新列表 [英] Combine five columns of a dataframe to two new lists

查看:139
本文介绍了将数据框的五列合并到两个新列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个data.frame NOAA_OLR_TEST:

I have a data.frame NOAA_OLR_TEST:

NOAA_OLR_TEST <- structure(list(DATE_START = structure(c(1170720000, 1170806400,
1170892800, 1170979200, 1171065600, 1171152000, 1171238400, 1171324800,
1171411200, 1171497600), class = c("POSIXct", "POSIXt")), 
DATE_END = structure(c(1171065600,1171152000, 1171238400, 1171324800, 
1171411200, 1171497600, 1171584000,1171670400, 1171756800, 1171843200), 
class = c("POSIXct", "POSIXt")), LONGITUDE = c(-89.5, -89.5, -89.5, -89.5, 
-89.5, -88.5, -88.5,-88.5, -88.5, -88.5), LATITUDE = c(-179.5, -179.5, -179.5, 
-179.5,-179.5, -179.5, -179.5, -179.5, -179.5, -179.5), OLR_DATA_1 = c(150,146, 
146, 142, NA, 150, 158, 155, 143, 142), OLR_DATA_2 = c(146,146, 142, 141, 150, 
NA, 155, 143, 142, 138), OLR_DATA_3 = c(146,NA, 141, 150, 158, 155, 143, 142, 
138, 135), OLR_DATA_4 = c(142,141, 150, 158, 155, 143, 142, 138, 135, NA), 
OLR_DATA_5 = c(141,150, NA, 155, 143, 142, 138, 135, 140, 139)), 
.Names = c("DATE_START","DATE_END", "LONGITUDE", "LATITUDE", "OLR_DATA_1", 
"OLR_DATA_2","OLR_DATA_3", "OLR_DATA_4", "OLR_DATA_5"), row.names = c(NA,10L), 
class = "data.frame") 

这是我的数据:

head(NOAA_OLR_TEST)

 DATE_START   DATE_END LONGITUDE LATITUDE OLR_DATA_1 OLR_DATA_2 OLR_DATA_3 OLR_DATA_4 OLR_DATA_5
1 2007-02-06 2007-02-10     -89.5   -179.5        150        146        146        142        141
2 2007-02-07 2007-02-11     -89.5   -179.5        146        146         NA        141        150
3 2007-02-08 2007-02-12     -89.5   -179.5        146        142        141        150         NA
4 2007-02-09 2007-02-13     -89.5   -179.5        142        141        150        158        155
5 2007-02-10 2007-02-14     -89.5   -179.5         NA        150        158        155        143
6 2007-02-11 2007-02-15     -88.5   -179.5        150         NA        155        143        142

我希望将数据帧NOAA_OLR_TEST[5:9]的第5列到第9列转换为名为data_list_1data_list_2的两个列表:

my expect is to convert No.5 to No.9 columns of the dataframes NOAA_OLR_TEST[5:9] to two lists named data_list_1 and data_list_2:

 DATE_START   DATE_END LONGITUDE LATITUDE        DATA_LIST_1     DATA_LIST_2  
1 2007-02-06 2007-02-10     -89.5   -179.5        (150 ,146)      (146,142,141)
2 2007-02-07 2007-02-11     -89.5   -179.5        (146 ,146)      ( NA,141,150)
3 2007-02-08 2007-02-12     -89.5   -179.5        (146 ,142)      (141,150, NA)
4 2007-02-09 2007-02-13     -89.5   -179.5        (142 ,141)      (150,158,155)
5 2007-02-10 2007-02-14     -89.5   -179.5        ( NA ,150)      (158,155,143)
6 2007-02-11 2007-02-15     -88.5   -179.5        (150 , NA)      (155,143,142)

我用mapply,Map,cbind,它们都有一些错误.

I use mapply,Map,cbind, all of them have some erros.

推荐答案

编辑如果您希望数据表现为列表,则您将无法在表中看到逗号分隔的字符串.但是,数据仍然可以作为常规列表使用.

EDIT If you want to the data to behave as a list, your won't be able to see it in a table as a comma separated string. However, the data will still be available as a normal list.

library(data.table)
setDT(NOAA_OLR_TEST)
NOAA_OLR_TEST[, DATA_LIST_1 := lapply(transpose(.SD), as.list), 
              .SDcols = c("OLR_DATA_1","OLR_DATA_2")]
NOAA_OLR_TEST[, DATA_LIST_2 := lapply(transpose(.SD), as.list), 
              .SDcols = c("OLR_DATA_3","OLR_DATA_4","OLR_DATA_5")]
NOAA_OLR_TEST[,(5:9):= NULL]
             DATE_START            DATE_END LONGITUDE LATITUDE DATA_LIST_1 DATA_LIST_2
 1: 2007-02-05 19:00:00 2007-02-09 19:00:00     -89.5   -179.5      <list>      <list>
 2: 2007-02-06 19:00:00 2007-02-10 19:00:00     -89.5   -179.5      <list>      <list>
 3: 2007-02-07 19:00:00 2007-02-11 19:00:00     -89.5   -179.5      <list>      <list>
 4: 2007-02-08 19:00:00 2007-02-12 19:00:00     -89.5   -179.5      <list>      <list>
 5: 2007-02-09 19:00:00 2007-02-13 19:00:00     -89.5   -179.5      <list>      <list>
 6: 2007-02-10 19:00:00 2007-02-14 19:00:00     -88.5   -179.5      <list>      <list>
 7: 2007-02-11 19:00:00 2007-02-15 19:00:00     -88.5   -179.5      <list>      <list>
 8: 2007-02-12 19:00:00 2007-02-16 19:00:00     -88.5   -179.5      <list>      <list>
 9: 2007-02-13 19:00:00 2007-02-17 19:00:00     -88.5   -179.5      <list>      <list>
10: 2007-02-14 19:00:00 2007-02-18 19:00:00     -88.5   -179.5      <list>      <list>

要显示列表确实是数字:

To show that the lists are indeed numeric:

first_row <- NOAA_OLR_TEST[DATE_START==as.POSIXct("2007-02-05 19:00:00")]
str(first_row$DATA_LIST_1[[1]])
List of 2
 $ OLR_DATA_1: num 150
 $ OLR_DATA_2: num 146

这篇关于将数据框的五列合并到两个新列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆