将数据框的五列合并到两个新列表 [英] Combine five columns of a dataframe to two new lists
本文介绍了将数据框的五列合并到两个新列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个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_1
和data_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屋!
查看全文