我在R中有这个数据集
dd=data.frame(
main=c("G","G","G","R","R","R","Y","Y","Y"),test=c(0,1,1,0,1,1,0,1,1),
a = c(1,0,0,2,0,0,3,0,0), b= c(0,3,0,0,6,0,0,4,0), c=c(0,0,5,0,0,8,0,0,9))
Run Code Online (Sandbox Code Playgroud)
我想看起来像这样
main test a b c
[1,] G 1 1 3 5
[2,] R 1 2 6 8
[3,] Y 1 3 4 9
Run Code Online (Sandbox Code Playgroud)
我有一些代码,但它不能正常工作.
你帮忙很多
aggregate(.~main, aggregate(.~main+test, dd, sum), sum)
# main test a b c
#1 G 1 1 3 5
#2 R 1 2 6 8
#3 Y 1 3 4 9
Run Code Online (Sandbox Code Playgroud)
首先,我们通过"主要"和"测试"进行聚合.有了这个聚合,我们只按"主"分组.嵌套过程允许我们首先添加"a,b,c"列,然后我们可以完成崩溃.
data.table来自@AnandaMahto 的解决方案,
as.data.table(dd)[, test := max(test), by = "main"][, lapply(.SD, sum), by = .(main, test)]
# main test a b c
#1: G 1 1 3 5
#2: R 1 2 6 8
#3: Y 1 3 4 9
Run Code Online (Sandbox Code Playgroud)
这个dplyr解决方案还:
dd %>% group_by(main) %>% summarise_each(funs(max))
#Source: local data frame [3 x 5]
#
# main test a b c
#1 G 1 1 3 5
#2 R 1 2 6 8
#3 Y 1 3 4 9
Run Code Online (Sandbox Code Playgroud)
它确实取决于您的最终产品.我很难看到如何添加测试ID和其他列可以提供帮助,但也许有一种方法让你疯狂:)