如果每行等于1

时间:2018-03-29 14:40:25

标签: r merge

我有一个像这样的data.frame:

var1 <- c(1,1,0,0,0,0,0,0,0,0)
var2 <- c(0,0,0,0,0,0,0,0,0,1)
var3 <- c(0,0,0,0,0,1,0,0,0,0)
id <- c(1,2,3,4,5,6,7,8,9,10)
data <- data.frame(id, var1, var2, var3)

我希望有一个新变量,包括代码1,如果三列中的任何一列== 1;如果所有三行==零,则等于零。

新变种 1 1 0 0 0 1 0 0 0 1

2 个答案:

答案 0 :(得分:1)

假设你只处理1和0。

new_var <- as.numeric(rowSums(data[,2:4])>0)
new_var
[1] 1 1 0 0 0 1 0 0 0 1

如果您的数字不是1,并且您想要特定检查1,则可以使用apply

new_var <- as.numeric(apply(data[,2:4]==1,1, any)
new_var
[1] 1 1 0 0 0 1 0 0 0 1

如果有一个非1的数字而其余的数字为0,则不会检查这种情况,但是你没有指明这种情况。

答案 1 :(得分:0)

在每一行中,我们将通过添加来检查var1,var2或var3是否大于0。

library(dplyr)
new_data <- data %>%
    rowwise() %>%
    mutate(new_var = ifelse(sum(var1, var2, var3) > 0, 1, 0))