如何沿着同一数据帧中的列分配R中数据帧的行总和

时间:2019-08-22 11:51:23

标签: r dataframe for-loop rowsum

我在R中有以下数据框

 DF1<-data.frame("S"=c("A", "B", "C"))
 namelist<-c("A", "B", "C")
 DF1[c("A", "B", "C")]<-c(1,2,3)
 DF1$B<-DF1$B*2

我创建了一个新列Sum,如下所示:

  DF1$Sum<-0

结果数据帧如下

 S A B C Sum
 A 1 2 1   0
 B 2 4 2   0
 C 3 6 3   0

我希望以某种方式填充Sum中的值,以使与Sum的A行相对应的值等于A列中的条目之和,与B和C相似。结果应如下所示

  S A B C Sum
1 A 1 2 1   6
2 B 2 4 2   10
3 C 3 6 3   6

我尝试了以下代码

 for( i in 1:nrow(DF1)){
  for( j in namelist){
 DF1$Sum[DF1$S[j][i]]=sum(DF1[,j])
  }}

我没有得到想要的结果。 我得到以下输出。我要求有人在这里帮助我。

  S A B C Sum
1 A 1 2 1   0
2 B 2 4 2   0
3 C 3 6 3   0

3 个答案:

答案 0 :(得分:2)

一种dplyr可能是:

DF1 %>%
 mutate(sum = colSums(.[-1]))

  S A B C sum
1 A 1 2 1   6
2 B 2 4 2  12
3 C 3 6 3   6

或与base R相同:

DF1$sum <- colSums(DF1[-1])

答案 1 :(得分:1)

这是使用任意字符序列的更通用的方法,也就是说,如果字符与列的顺序不同

tmp=colSums(DF1[,-1])
tmp2=data.frame(S=names(tmp),Sum=tmp)
merge(DF1,tmp2,by="S")

答案 2 :(得分:1)

这是一个完成您目标的快速循环

for(i in 1:nrow(DF1)){
DF1$SUM[i] <- sum(DF1[,i+1])
}