我有一个如下所示的数据集:
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))
}
有没有办法用循环来做到这一点?我应该使用清单吗?如果是这样,您是否可以提供详细说明,因为列表对我来说相对较新?
答案 0 :(得分:1)
我们可以在不使用ifelse
且不使用get
部分的情况下执行此操作。由于paste
是矢量化函数,我们可以在循环外创建'nam'
nam <- paste0("r_own_", 2:7)
然后循环遍历'w'除第1列之外的列,将逻辑向量(w[,1]==0
)与x==1
进行比较,将其强制转换为as.integer
的二进制,并指定{{ 1}}输出以创建'nam'
list