合并填充了不同列的行
Combine rows with different columns populated
是否有特定的 R 函数可用于实现以下目标?
我试过使用收集,但它不太一样。
df3 <-data.frame(ID=c(1,1,2,2), ID2= c(11,11,22,21), ID3=c(22,22,33,33), b =c(5,0,0,0), c=c(0,0, 3,0), d=c(0L,3,0,4))
df3
# ID ID2 ID3 b c d
#1 1 11 22 5 0 0
#2 1 11 22 0 0 3
#3 2 22 33 0 3 0
#4 2 21 33 0 0 4
after_df3 <- data.frame(ID1=c(1,2,2), ID2=c(11,22,21), ID3=c(22,33,33), b=c(5,0,0), c=c(0,3,0), d=c(3,0,4))
after_df3
# ID1 ID2 ID3 b c d
#1 1 11 22 5 0 3
#2 2 22 33 0 3 0
#3 2 21 33 0 0 4
我们可以使用 aggregate
从 base R
dfN <- aggregate(.~ID, df3, sum)
dfN
# ID b c d
#1 1 5 0 3
#2 2 0 3 4
或使用data.table
library(data.table)
dfN1 <- setDT(df3)[, lapply(.SD, sum), by = ID]
dfN1
更新
有了新的数据集
aggregate(.~ID+ID2+ID3, df3, sum)
# ID ID2 ID3 b c d
#1 1 11 22 5 0 3
#2 2 21 33 0 0 4
#3 2 22 33 0 3 0
或使用data.table
setDT(df3)[,lapply(.SD, sum) ,.(ID, ID2, ID3)]
是否有特定的 R 函数可用于实现以下目标? 我试过使用收集,但它不太一样。
df3 <-data.frame(ID=c(1,1,2,2), ID2= c(11,11,22,21), ID3=c(22,22,33,33), b =c(5,0,0,0), c=c(0,0, 3,0), d=c(0L,3,0,4))
df3
# ID ID2 ID3 b c d
#1 1 11 22 5 0 0
#2 1 11 22 0 0 3
#3 2 22 33 0 3 0
#4 2 21 33 0 0 4
after_df3 <- data.frame(ID1=c(1,2,2), ID2=c(11,22,21), ID3=c(22,33,33), b=c(5,0,0), c=c(0,3,0), d=c(3,0,4))
after_df3
# ID1 ID2 ID3 b c d
#1 1 11 22 5 0 3
#2 2 22 33 0 3 0
#3 2 21 33 0 0 4
我们可以使用 aggregate
从 base R
dfN <- aggregate(.~ID, df3, sum)
dfN
# ID b c d
#1 1 5 0 3
#2 2 0 3 4
或使用data.table
library(data.table)
dfN1 <- setDT(df3)[, lapply(.SD, sum), by = ID]
dfN1
更新
有了新的数据集
aggregate(.~ID+ID2+ID3, df3, sum)
# ID ID2 ID3 b c d
#1 1 11 22 5 0 3
#2 2 21 33 0 0 4
#3 2 22 33 0 3 0
或使用data.table
setDT(df3)[,lapply(.SD, sum) ,.(ID, ID2, ID3)]