不同行中的值在一列中共享相同的值
Sum values in different rows sharing the same value in a column
假设我有以下数据集:
PlotName<- c(A,B,B,C,D,E,F,F,F)
NewValue<- c(1,2,1,3,0,0,2,1,3)
OldValue<- c(3,3,1,2,1,3,0,3,1)
我想对 PlotName
中重复的元素的 NewValue
和 OldValue
值求和,以消除相同的重复元素(字母)。例如,对于 'B' NewValue=2+1=3 和 OldValue=3+1=4
即:
PlotName<- c(A,B,C,D,E,F)
NewValue<- c(1,3,3,0,0,6)
OldValue<- c(3,4,2,1,3,4)
我可以过滤 PlotName
中具有重复值的行(例如使用 dplyr),然后分别对这些值求和,但我正在寻找一种更快的方法来处理具有许多重复值的大型数据集。
sapply(split(OldValue, PlotName), sum)
#A B C D E F
#3 4 2 1 3 4
sapply(split(NewValue, PlotName), sum)
#A B C D E F
#1 3 3 0 0 6
我们可以在创建 data.frame
后对任何一个分组操作执行此操作
aggregate(.~PlotName, data.frame(NewValue, OldValue, PlotName), FUN = sum)
或者另一种选择是 rowsum
rowsum(cbind(NewValue, OldValue), PlotName)
# NewValue OldValue
#A 1 3
#B 3 4
#C 3 2
#D 0 1
#E 0 3
#F 6 4
更快的选择是转换为 data.table
并使用 data.table
方法
library(data.table)
data.table(NewValue, OldValue, PlotName)[, lapply(.SD, sum), PlotName]
与dplyr
:
library(dplyr)
data.frame(PlotName, NewValue, OldValue) %>%
group_by(PlotName) %>%
summarise_all(sum)
# # A tibble: 6 × 3
# PlotName NewValue OldValue
# <fctr> <dbl> <dbl>
# 1 A 1 3
# 2 B 3 4
# 3 C 3 2
# 4 D 0 1
# 5 E 0 3
# 6 F 6 4
假设我有以下数据集:
PlotName<- c(A,B,B,C,D,E,F,F,F)
NewValue<- c(1,2,1,3,0,0,2,1,3)
OldValue<- c(3,3,1,2,1,3,0,3,1)
我想对 PlotName
中重复的元素的 NewValue
和 OldValue
值求和,以消除相同的重复元素(字母)。例如,对于 'B' NewValue=2+1=3 和 OldValue=3+1=4
即:
PlotName<- c(A,B,C,D,E,F)
NewValue<- c(1,3,3,0,0,6)
OldValue<- c(3,4,2,1,3,4)
我可以过滤 PlotName
中具有重复值的行(例如使用 dplyr),然后分别对这些值求和,但我正在寻找一种更快的方法来处理具有许多重复值的大型数据集。
sapply(split(OldValue, PlotName), sum)
#A B C D E F
#3 4 2 1 3 4
sapply(split(NewValue, PlotName), sum)
#A B C D E F
#1 3 3 0 0 6
我们可以在创建 data.frame
后对任何一个分组操作执行此操作aggregate(.~PlotName, data.frame(NewValue, OldValue, PlotName), FUN = sum)
或者另一种选择是 rowsum
rowsum(cbind(NewValue, OldValue), PlotName)
# NewValue OldValue
#A 1 3
#B 3 4
#C 3 2
#D 0 1
#E 0 3
#F 6 4
更快的选择是转换为 data.table
并使用 data.table
方法
library(data.table)
data.table(NewValue, OldValue, PlotName)[, lapply(.SD, sum), PlotName]
与dplyr
:
library(dplyr)
data.frame(PlotName, NewValue, OldValue) %>%
group_by(PlotName) %>%
summarise_all(sum)
# # A tibble: 6 × 3
# PlotName NewValue OldValue
# <fctr> <dbl> <dbl>
# 1 A 1 3
# 2 B 3 4
# 3 C 3 2
# 4 D 0 1
# 5 E 0 3
# 6 F 6 4