我有以下两个数据帧:
a<-1,2,3,4,5
b<-3,4,5,6,7
d<-"a","b","c","d","e"
df1<-data.frame(a,b,d)
a<-1,2,3,4,5
c<-3,4,5,6,7
e<-"a","b","c","d","e"
df2<-data.frame(a,c,e)
我想在两个数据帧中获得一个称为合计的列,该列求和a + b + c。由于df1中缺少列c,而df2中缺少列b,因此出现错误“替换为0行,数据为5123”(未初始化的列)
但是有没有一种方法可以通过跳过缺少的列来汇总这些列? 这意味着我要获得以下信息:
df1$total<-sum(df1$a+df1$b)
df2$total<-sum(df2$a+df2$c)
答案 0 :(得分:1)
先选择sapply()
,然后再选择rowSums()
df1$total <- rowSums(df1[, sapply(df1, is.numeric)])
屈服
> df1
a b c total
1 1 3 a 4
2 2 4 b 6
3 3 5 c 8
4 4 6 d 10
5 5 7 e 12
数据
df1 <- data.frame(a=1:5, b=3:7, c=letters[1:5])
答案 1 :(得分:1)
考虑到更一般的上下文(data.frame中有一些数字列,您不想包括在总和中),您可以执行以下操作:
col2sum <- c("a", "b", "c")
df1$total <- rowSums(Filter(is.numeric, df1[names(df1) %in% col2sum]))
df1
a b c f total
1 1 3 a 2 4
2 2 4 b 3 6
3 3 5 c 4 8
4 4 6 d 5 10
5 5 7 e 6 12
df2$total <- rowSums(Filter(is.numeric, df2[names(df2) %in% col2sum]))
df2
a c d e total
1 1 4 a 1 5
2 2 5 b 2 7
3 3 6 c 3 9
4 4 7 d 4 11
5 5 8 e 5 13
或者:
rowSums(df2[names(df2) %in% col2sum & sapply(df2, is.numeric)])
**数据**
df1 <- data.frame(a = 1:5, b = 3:7, c = letters[1:5], f = 2:6)
df2 <- data.frame(a = 1:5, c = 4:8, d = letters[1:5], e = 1:5)