我有以下数据框,我希望将一行中的二进制值合并到一起。
df =data.frame(ID=c(rep("A",5),rep("B",5)), nr=c(rep("2",5),rep("3",5)), replicate(10,sample(0:1,10,rep=TRUE)))
eg:
# ID nr X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# A 2 0 0 1 1 1 1 1 1 1 0
# A 2 1 0 0 0 0 0 0 1 0 1
# A 2 0 0 1 1 1 0 0 0 0 1
# A 2 0 0 0 0 0 1 1 1 0 1
# A 2 0 0 0 1 0 1 1 0 1 1
# B 3 0 1 0 0 1 0 0 0 1 1
# B 3 1 1 0 0 0 0 0 0 0 1
# B 3 1 0 1 0 0 0 1 1 0 1
# B 3 1 1 1 0 1 0 0 1 1 1
# B 3 0 0 0 1 0 0 0 1 0 1
现在我想合并前两列的行:
df2 = ddply(df, c(1:2), summarise, numcolwise(sum,c(3:12)))
但是我收到以下错误:
Error in vector(type, length) :
vector: cannot make a vector of mode 'closure'.
此外,我希望将高于1的任何内容重置为1以保持二进制,但由于我无法通过错误,我还没有尝试过。
我知道之前已经问过这个问题的变化,但我以前没有发现过这个问题。请记住,我想使用列索引,因为我正在处理大数据。
答案 0 :(得分:2)
如果您的数据非常大(如评论中所述),请忘记plyr
,尝试data.table
library(data.table)
setDT(df)[, lapply(.SD, sum), by = list(ID, nr)]
## ID nr X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
## 1: A 2 2 3 5 2 5 2 1 3 4 1
## 2: B 3 3 3 4 1 3 2 3 2 1 4
或者,如果您想坚持使用plyr
家庭,请转到下一代:dplyr
library(dplyr)
df %>%
group_by(ID, nr) %>%
summarise_each(funs(sum))
# Source: local data table [2 x 12]
# Groups: ID
#
# ID nr X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# 1 A 2 2 3 5 2 5 2 1 3 4 1
# 2 B 3 3 3 4 1 3 2 3 2 1 4