周一快乐 -
我使用grep创建df2,将df1子集化为仅返回具有特定字符串的行。
我所追求的是一种仅使用字符串中的值(在本例中为3)填充第一个可用列(来自A,B或C)的方法。
df2 <- df1[grep("DW 3*", df1$D), ]
DF2:
ID A B C D
1 3 3 DW 3*
2 4 DW 3*
3 4 3 DW 3*
4 3 DW 3*
所以我最终得到了
ID A B C D
1 3 3 3 DW 3*
2 4 3 DW 3*
3 4 3 3 DW 3*
4 3 3 DW 3*
我希望这很清楚 - 请随时要求澄清,并提前感谢。
答案 0 :(得分:2)
您可以使用for
循环查找第一个NA
值,然后将其替换为您需要的值:
(我无法找到你从中获取价值的地方,所以我只是硬编码3
作为替代价值)
设置数据:
df2 = data.frame(ID=c(1,2,3,4),A=c(3,4,4,3), B=c(3,NA,NA,3),C= c(NA,NA,NA,NA),
D=rep("DW 3*",4))
For循环,检查哪些行是NA,然后选择该列名然后用于替换:
for(i in 1:nrow(df2)){
df2[i,colnames(df2)[which(is.na(df2[i,]))][1]]=3
}
答案 1 :(得分:2)
使用“应用”查找第一个NA
值并将其替换为3
data.frame(t(apply(df2, 1,
function(x) {x[which(is.na(x))[1]] <- 3; x})))