0
我有一個寬文件(132列寬)的500Mb文件,其中六個列是變量,描述一個實例在時間1到16(96列),其中36個是非變。我想改變數據結構,以便我爲每個這些實例都有一個列表列,併爲不變的信息提供一個單獨的列。時間實例的變量名稱由以「1」結尾的名稱唯一給出。從寬數據框轉到一個帶有列表列的數據框
library(tidyverse)
a<-data_frame(id=c("A","B","C"),
const82=c("1952","1960","1970"),
const6=as.Date(today()-c(1:3)),
var1=c(1:3),
z21=c(letters[1:3]),
o31=c(11:13),
m41=c(LETTERS[11:13]),
var2=c(4:6),
z22=c(letters[4:6]),
o32=c(20:22),
m42=c(LETTERS[7:9]))
所以,我想:
gather(a, ... = dplyr::contains(ends_with("1"))) %>% nest(-id,-const81,-const6)
但我相信contains
沒有矢量讓我可以在以「1」結尾的所有變量不是循環。此外,就像Group_by可以用於嵌套輸入,我相信擁有一個「嵌套聚集列」的函數會很棒。
從tidyverse跳到data.table,我可以
a_long<-melt(setDT(a), id=c("id","const82","const6"),
measure=patterns(c("^var\\d","^z2\\d","^o3\\d","^m4\\d")),
value.name=vary<-c("var","z2","o3","m4"),
variable.name="num")%>%
nest(... = num:m4,.key=instance)
這是比較費力的,比我所期待的,但讓我停止的方式。現在,如果我想爲常量變量添加另一個列表,我不能再使用嵌套。
a_long%>% nest(-id,-instance)
Error in grouped_indices_impl(groups$data, groups$groups) :
cannot group column instance, of class 'list'
所以 -
- 我怎樣才能做到這一點很容易?
- 我相信這些listcolumns會節省對象的內存,因爲少數信息在數據框中被複制 - 但是這樣做嗎?
期望中的數據結構 - 但步驟似乎不必要地複雜化:
a_long %>% select(1:3) %>% nest(-id,.key = const) %>% left_join(a_long) %>% select(-const82,-const6)
您可以根據您的輸入數據分享預期的輸出嗎? – mtoto