繁体   English   中英

如何制作仅对数字列求和的列?

[英]How do I make a column that sums only numeric columns?

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

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

如何制作名为SUMCOL列,将COL1COL2COL3和我添加的任何其他数字列相加?

仅具有上述列的SUMCOL示例:

SUMCOL
60
90

您可以使用这个函数,它利用了select_if和作用域参数is_numeric

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

解决方案

df$SUMCOL <- myfun(df)

输出

    LABEL COL1 COL2 COL3 SUMCOL
1    Meat   10   20   30     60
2 Veggies   20   30   40     90

我最终使用了这段代码:

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

我知道这是一个旧帖子,但有一种整洁的方法可以只用 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 的新列。为此,选择所有列(即句点),但仅对以“COL”开头的列执行 rowSums(顺便说一句,您还可以使用 c("COL1", "COL2", "COL3") 列出列并忽略任何缺失值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM