如何沿同一数据帧中的列分配 R 中数据帧的行和
How to assign rowsums of a dataframe in R along a column in the same dataframe
我在 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
得到的dataframe如下
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
一个 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])
这里有一个更通用的方法来处理任意字符序列,即如果字符与列的顺序不同
tmp=colSums(DF1[,-1])
tmp2=data.frame(S=names(tmp),Sum=tmp)
merge(DF1,tmp2,by="S")
这是实现您目标的快速循环
for(i in 1:nrow(DF1)){
DF1$SUM[i] <- sum(DF1[,i+1])
}
我在 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
得到的dataframe如下
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
一个 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])
这里有一个更通用的方法来处理任意字符序列,即如果字符与列的顺序不同
tmp=colSums(DF1[,-1])
tmp2=data.frame(S=names(tmp),Sum=tmp)
merge(DF1,tmp2,by="S")
这是实现您目标的快速循环
for(i in 1:nrow(DF1)){
DF1$SUM[i] <- sum(DF1[,i+1])
}