我的问题由于重复而被关闭,因为我没有很好地解释自己。此后出现的问题阻碍了我对dplyr的collect-unite-spread的使用。通常这是一个简单的任务,但是有一些问题使此数据集难以实现。
我有以下数据集
ID V.1 V.2 V.3 V.4
1 x y Z 0
1 x y Z 0
1 x y Z 0
1 x y Z 1
2 x y Z 0
2 x y Z 1
3 x y Z 0
3 x y Z 1
数据集必须看起来像这样
ID V.1a V.2a V.3a V.1b V.2b V.3b V.1c V.2c V.3c V.1d V.2d V.3d V.4
1 x y z x y z x y z x y z 4
2 x y z x y z na na na na na na 2
3 x y z x y z na na na na na na 2
问题-每个唯一ID的行数不同
这似乎是我最大的问题。这导致列数不均匀,并且使我通常的聚合方法无效。
任何帮助将不胜感激。
答案 0 :(得分:1)
这是使用data.table
library(data.table)
setDT(dat)
out <- dcast(dat, ID ~ rowid(ID), value.var = c("V.1", "V.2", "V.3"))[
dat[, .('V.4' = length(V.4)), by = ID], on = "ID"
]
out
# ID V.1_1 V.1_2 V.1_3 V.1_4 V.2_1 V.2_2 V.2_3 V.2_4 V.3_1 V.3_2 V.3_3 V.3_4 V.4
#1: 1 x x x x y y y y Z Z Z Z 4
#2: 2 x x <NA> <NA> y y <NA> <NA> Z Z <NA> <NA> 2
#3: 3 x x <NA> <NA> y y <NA> <NA> Z Z <NA> <NA> 2
我们使用dcast
将列V.1
扩展到V.3
,并将结果连接到dat[, .('V.4' = length(V.4)), by = ID]
,后者仅聚合列V.4
。
如果要继续使用setDF(out)
,请使用data.frame
。
数据
dat <- read.table(text = 'ID V.1 V.2 V.3 V.4
1 x y Z 0
1 x y Z 0
1 x y Z 0
1 x y Z 1
2 x y Z 0
2 x y Z 1
3 x y Z 0
3 x y Z 1',
header = TRUE, stringsAsFactors = FALSE)