pan*_*tts 10 r apply dataframe
启动数据帧
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
Run Code Online (Sandbox Code Playgroud)
添加三个列标题,下面是空列.附加起始值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
Run Code Online (Sandbox Code Playgroud)
我想更新我的var1:var3应用功能,以每一行,其中IF列marker= yesAND id_out匹配任何一个var1:var3,更换任何var1:var3有id_new.我找到了这个解决方案,但适用于一行代码,仍然需要var1:var3更新行的每个新部分.
data_start[1, 4:6][data_start[1, 4:6] == data_start[1,"id_out"]] <- data_start[1,"id_new"]
Run Code Online (Sandbox Code Playgroud)
在再次应用函数之前,每行还取决于使用上一行中的值.
最终输出看起来像这样,当标记= 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
Run Code Online (Sandbox Code Playgroud)
这可以与任意数量的列一起使用,并与基本 R 一起使用:
cols <- c("var1", "var2", "var3")
for(j in 1:length(cols)) {
var <- cols[j]
for(i in 1:nrow(data_start)){
if(i > 1) {
data_start[i, var] <- data_start[i-1, var]
}
if(data_start[i, "marker"] == "yes" & data_start[i, var] == data_start[i,"id_out"]) {
data_start[i,var] <- data_start[i, "id_new"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |