【问题标题】:making a new variable if each row equal 1如果每行等于 1,则创建一个新变量
【发布时间】:2018-09-08 13:55:20
【问题描述】:

我有一个这样的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

【问题讨论】:

  • 如果每一列都等于 1,或者任何一列等于 1?
  • 我的意思是任何列都是1
  • 在您的示例数据中,没有行所有三列的条目都等于 1。

标签: r merge


【解决方案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 的情况,但您没有将其指定为情况。

【讨论】:

  • 第二种情况最好使用as.numeric(rowSums(data[,2:4] == 1) &gt; 0)
  • 我运行你的代码如下。但是,新生成的变量完全丢失了: stenosis$n 0)
【解决方案2】:

在每一行中,我们将通过相加来检查 var1、var2 或 var3 中的任何一个是否大于 0。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多