如何创建仅对数字列求和的列?

时间:2017-08-18 20:02:55

标签: r

我有一个包含很多列的数据框。

LABEL    COL1  COL2  COL3
Meat     10    20    30
Veggies  20    30    40

如何将名为SUMCOL的列添加COL1COL2COL3以及我添加的任何其他数字列?

仅包含上述列的SUMCOL示例:

SUMCOL
60
90

3 个答案:

答案 0 :(得分:1)

您可以使用此功能,该功能利用futex和范围参数select_if

is_numeric

解决方案

myfun <- function(df) {
               require(dplyr)
               y <- select_if(df, is_numeric)
               rowSums(y, na.rm=T)
         }

输出

df$SUMCOL <- myfun(df)

答案 1 :(得分:0)

我最终使用了这段代码:

df$SUMCOL <- rowSums(df[sapply(df, is.numeric)], na.rm = TRUE)

答案 2 :(得分:0)

我知道这是一篇旧帖子,但有一种整洁的方法可以只用 dplyr 来做到这一点:

library(dplyr)

#Create dataset
data <- tibble(LABEL = c("Meat", "Veggies"),
               COL1 = c(10, 20),
               COL2 = c(20, 30),
               COL3 = c(30, 40))

data %>%
  mutate(SUMCOL = select(., starts_with("COL")) %>%
         rowSums(na.rm = TRUE))

如果有人不熟悉这个语法,它基本上是说“制作(变异)一个名为 SUMCOL 的新列。为此,选择所有列(即句点),但仅对以“开头的列执行 rowSums COL”(顺便说一句,您也可以使用 c("COL1", "COL2", "COL3") 列出列并忽略任何缺失值。