首页 > 解决方案 > R循环根据条件生成多个变量

问题描述

数据如下。

x1<- c(1,0,0,0,1,1,1,0)
x2<- c(1,0,0,0,1,1,1,0)
x3<- c(1,0,0,0,1,1,1,0)
x4<- c(1,0,0,0,1,1,1,0)
x5<- c(1,0,0,0,1,1,1,0)
x6<- c(1,0,0,0,1,1,1,0)

my_data <- as.data.frame(cbind(x1, x2, x3, x4, x5, x6))

我想使用循环来自动化以下过程:

my_data$a1 = ifelse(my_data$x1> 0 & is.na(my_data$x1) != T, 1, 0)
my_data$a2 = ifelse(my_data$x2> 0 & is.na(my_data$x2) != T, 1, 0)
my_data$a3 = ifelse(my_data$x3> 0 & is.na(my_data$x3) != T, 1, 0)
my_data$a4 = ifelse(my_data$x4> 0 & is.na(my_data$x4) != T, 1, 0)
my_data$a5 = ifelse(my_data$x5> 0 & is.na(my_data$x5) != T, 1, 0)
my_data$a6 = ifelse(my_data$x6> 0 & is.na(my_data$x6) != T, 1, 0)

任何帮助将不胜感激,谢谢!

标签: rloopsdplyr

解决方案


您可以使用以下代码 -

my_data[paste0('a', seq_along(my_data))] <-  +(my_data > 0 & !is.na(my_data))
my_data

#  x1 x2 x3 x4 x5 x6 a1 a2 a3 a4 a5 a6
#1  1  1  1  1  1  1  1  1  1  1  1  1
#2  0  0  0  0  0  0  0  0  0  0  0  0
#3  0  0  0  0  0  0  0  0  0  0  0  0
#4  0  0  0  0  0  0  0  0  0  0  0  0
#5  1  1  1  1  1  1  1  1  1  1  1  1
#6  1  1  1  1  1  1  1  1  1  1  1  1
#7  1  1  1  1  1  1  1  1  1  1  1  1
#8  0  0  0  0  0  0  0  0  0  0  0  0

这将在值大于 0 而不是 的地方分配 1 NAmy_data > 0 & !is.na(my_data)返回一个逻辑值 ( TRUE/ FALSE) +,在其前面添加将它们转换为整数 ( 1/ 0)。


推荐阅读