仅汇总数据框中的可用列

时间:2018-07-04 14:33:34

标签: r sum

我有以下两个数据帧:

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)

2 个答案:

答案 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)