r:动态数据帧循环

时间:2017-01-20 22:22:44

标签: r list loops

我有一个如下所示的数据集:

   own_cc.1 own_cc.2 own_cc.3 own_cc.4 own_cc.5 own_cc.6 own_cc.7
1         1        0        1        0        1        0        0
2         1       NA        1        1        1        1       NA
3         0        0        1        0        0        0        0
4         1        0       NA        0        1       NA       NA
5         1        0        1        1        0        0        0
6         0        0        0        0        0        1        0
7         1        0        0        0        0        0        0
8         1        1        0        0        0        0        1
9         0        0        1        0        0        0        0
10        0        0        0        0        0        1        0

我想要做的是为own_cc.1和其他变量的每个组合创建一个新变量。因此,该函数为r_own_2 <- ifelse(own_cc.1==0 own_cc.2==1,1,0),它应该只切换r_own_own_cc.2部分。

我尝试用循环执行此操作,但它不起作用:

for(i in 2:7) {
  nam <- paste("r_own_", i, sep = "")
  w[nam] <- NA
  w[nam] <- with(w, ifelse(own_cc.1==0 & get(nam)==1,1,0))
}

有没有办法用循环来做到这一点?我应该使用清单吗?如果是这样,您是否可以提供详细说明,因为列表对我来说相对较新?

1 个答案:

答案 0 :(得分:1)

我们可以在不使用ifelse且不使用get部分的情况下执行此操作。由于paste是矢量化函数,我们可以在循环外创建'nam'

nam <- paste0("r_own_", 2:7)

然后循环遍历'w'除第1列之外的列,将逻辑向量(w[,1]==0)与x==1进行比较,将其强制转换为as.integer的二进制,并指定{{ 1}}输出以创建'nam'

中指定的新列
list