根据R

时间:2017-11-13 10:40:10

标签: r grep subset

周一快乐 -

我使用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*

我希望这很清楚 - 请随时要求澄清,并提前感谢。

2 个答案:

答案 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})))