根据 R 中特定列的总和创建一个新值

Create a new value based on summing specific columns in R

我有一个数据框:

dat <- data.frame(col1 = sample(0:3, 10, replace = TRUE),
                  col2 = sample(0:3, 10, replace = TRUE),
                  col3 = sample(0:3, 10, replace = TRUE),
                  col4 = sample(0:3, 10, replace = TRUE))

我想创建一个新向量(在数据框之外)var 如果 col3col4 的总和 >= 4,它将声明 1否则为 0。我怎样才能做到这一点?我尝试在 ifelse 语句中使用 sum,但它似乎产生了 character 输出。

有线索吗?谢谢!

如果还有NA,则使用rowSumsna.rm = TRUE

vec1 <- as.integer(rowSums(dat[3:4], na.rm = TRUE) >= 4)

以更一般的方式,如果需要,您还可以使用定义函数中包含的各种进一步逻辑的应用路径...

apply(dat,1,FUN=function (x) {as.integer(sum(x[3:4], na.rm=TRUE)>= 4)})      

使用dplyr,我们可以使用mutate创建一个新的列(var),使用rowSums和是否[=17=的总和的条件] 和 col4 大于或等于 4。这里,我使用 + 从逻辑转换为 0 或 1。然后,我们可以使用 pull 得到向量 var.

library(tidyverse)

var <- dat %>% 
  mutate(var = +(rowSums(select(., c(col3:col4)), na.rm = TRUE) >= 4)) %>% 
  pull(var)

输出

[1] 1 1 1 0 0 1 1 1 0 0

或者另一种选择是对每一行使用 sumc_across

var <- dat %>% 
  rowwise() %>% 
  mutate(var = +(sum(c_across(col3:col4), na.rm = TRUE) >= 4)) %>% 
  pull(var)