如何在R语言中基于多列变量生成符合指定规则的新变量x
在R中生成符合特定规则的变量x
先定义原始数据:
a = c(1,0,0,NA,0,1) b = c(0,1,0,NA,NA,0) c = c(0,1,0,NA,NA,NA) df <- cbind(a, b, c)
需要生成变量x,规则如下:
- 只要
a/b/c任意一列是1,x为1 - 当三列无
1时:- 若所有值都是
0(无缺失),x为0 - 若存在缺失值(包括全缺失),
x为NA
- 若所有值都是
期望输出:
df a b c x [1,] 1 0 0 1 [2,] 0 1 1 1 [3,] 0 0 0 0 [4,] NA NA NA NA [5,] 0 NA NA NA [6,] 1 0 NA 1
解决方法
可以用apply逐行处理,结合逻辑判断实现:
x <- apply(df, 1, function(row) { # 检查是否存在1 if (any(row == 1, na.rm = TRUE)) { 1 } else { # 确认所有非缺失值都是0 all_zero <- all(row == 0, na.rm = TRUE) # 检查是否有缺失 has_na <- any(is.na(row)) if (all_zero && !has_na) { 0 } else { NA } } }) # 把x合并到原数据中 df <- cbind(df, x)
运行这段代码后,就能得到符合要求的x变量。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

