R 替换NA和x27;s使用多列数据

R 替换NA和x27;s使用多列数据,r,for-loop,dataframe,R,For Loop,Dataframe,我有一个看起来像这样的数据框: ID col2 col3 col4 1 5 NA NA 2 NA NA 1 3 5 NA NA 4 19 NA 1 如果col2有值,则该单元格不应更改(即使第3列和第4列包含值)。但是,如果col2包含一个“NA”值,我想返回col3或col4中的任何非NA值(如果存在) 如下图所示的所需输出,请注意第2行现在是如何包含“1”的 ID col2

我有一个看起来像这样的数据框:

ID   col2  col3   col4 
1      5    NA    NA
2     NA    NA    1 
3      5    NA    NA
4     19    NA    1        
如果col2有值,则该单元格不应更改(即使第3列和第4列包含值)。但是,如果col2包含一个“NA”值,我想返回col3或col4中的任何非NA值(如果存在)

如下图所示的所需输出,请注意第2行现在是如何包含“1”的

ID   col2  col3   col4 
1      5    NA    NA
2      1    NA    1 
3      5    NA    NA
4     19    NA    1   
我知道这可以通过使用$或[]引用每个列来手动完成,但是如何使用for循环或apply来完成呢


谢谢

如果还有

df1$col2 <- with(df1, ifelse(is.na(col2), pmax(col3, col4, na.rm = TRUE), col2))
df1$col2
#[1]  5  1  5 19

如果COL3和COL4都具有Na元素在COL2中的非NA值,那么你应该考虑哪一个呢?这是个很好的问题。他们两个都没关系!作品非常感谢。
i1 <- is.na(df1$col2)
df1$col2[i1] <- do.call(pmax, c(df1[i1, 3:4], na.rm = TRUE))