【发布时间】:2016-09-14 03:16:58
【问题描述】:
起始数据帧
data_start <- data.frame(marker = c("yes","yes","no","yes","no"),
id_out = c(5,3,1,1,7),
id_new = c(6,8,9,4,2))
> data_start
marker id_out id_new
1 yes 5 6
2 yes 3 8
3 no 1 9
4 yes 1 4
5 no 7 2
在下面添加三个带有空列的列标题。附加起始 var1:var3 值。
data_start[,c("var1", "var2", "var3")] <- NA
vars <- c(5,3,1)
data_start[1, 4:6] <- vars
> data_start
marker id_out id_new var1 var2 var3
1 yes 5 6 5 3 1
2 yes 3 8 NA NA NA
3 no 1 9 NA NA NA
4 yes 1 4 NA NA NA
5 no 7 2 NA NA NA
我想通过对 IF marker = yes AND id_out 匹配任何var1:var3 的每一行应用一个函数来更新我的var1:var3 列,将var1:var3 中的任何一个替换为@987654330 @。我找到了这个解决方案,但适用于一行代码,并且仍然需要更新行的每个新 var1:var3 部分。
data_start[1, 4:6][data_start[1, 4:6] == data_start[1,"id_out"]] <- data_start[1,"id_new"]
在再次应用函数之前,每一行还取决于使用上一行中的值。
最终输出如下所示,其中当标记 = no 时行保持不变并且随后更新每一行。
> data_final
marker id_out id_new var1 var2 var3
1 yes 5 6 6 3 1
2 yes 3 8 6 8 1
3 no 1 9 6 8 1
4 yes 1 4 6 8 4
5 no 7 2 6 8 4
【问题讨论】: