根据 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
如果 col3
和 col4
的总和 >= 4,它将声明 1
否则为 0。我怎样才能做到这一点?我尝试在 ifelse
语句中使用 sum
,但它似乎产生了 character
输出。
有线索吗?谢谢!
如果还有NA
,则使用rowSums
和na.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
或者另一种选择是对每一行使用 sum
和 c_across
:
var <- dat %>%
rowwise() %>%
mutate(var = +(sum(c_across(col3:col4), na.rm = TRUE) >= 4)) %>%
pull(var)
我有一个数据框:
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
如果 col3
和 col4
的总和 >= 4,它将声明 1
否则为 0。我怎样才能做到这一点?我尝试在 ifelse
语句中使用 sum
,但它似乎产生了 character
输出。
有线索吗?谢谢!
如果还有NA
,则使用rowSums
和na.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
或者另一种选择是对每一行使用 sum
和 c_across
:
var <- dat %>%
rowwise() %>%
mutate(var = +(sum(c_across(col3:col4), na.rm = TRUE) >= 4)) %>%
pull(var)