将 NA 替换为具有相应列名的另一列中的值

标签 r

我有一个如下所示的数据集:

Col1    Col2    Col3     Col4   Last_Col1    Last_Col2   Last_Col3    Last_Col4
  NA       1       4        7           9           10          11           12
  NA      NA       4       NA          NA            9          NA           10
   8      NA       9       10          11           12          20           49
   9       7      NA       NA          34            2           3           50

如何将名称开头没有 Last_ 的 NA 值替换为名称中带有 Last_ 的相应列?然后我想删除名称中包含 Last_ 的列。

最终预期输出:

Col1    Col2    Col3     Col4   
   9       1       4        7    
  NA       9       4       10    
   8      12       9       10    
   9       7       3       50

任何帮助都会很棒,谢谢!

最佳答案

由于是相应的列,我们将要替换的“NA”列(“nm1”)和以“Last”为前缀的列(“nm2”)进行子集化,在第一个集合上创建一个逻辑矩阵列 ('i1'),使用它来分配对应于 NA

的第二组值的值
nm1 <- names(df1)[1:4]
nm2 <- names(df1)[5:8]

或者使用

nm1 <- names(df1)[startsWith(names(df1), "Col")]
nm2 <- names(df1)[startsWith(names(df1), "Last_")]
i1 <- is.na(df1[nm1])
df1[nm1][i1] <- df1[nm2][i1] 
newdf <- df1[nm1]
newdf
#  Col1 Col2 Col3 Col4
#1    9    1    4    7
#2   NA    9    4   10
#3    8   12    9   10
#4    9    7    3   50

数据

df1 <- structure(list(Col1 = c(NA, NA, 8L, 9L), Col2 = c(1L, NA, NA, 
7L), Col3 = c(4L, 4L, 9L, NA), Col4 = c(7L, NA, 10L, NA), Last_Col1 = c(9L, 
 NA, 11L, 34L), Last_Col2 = c(10L, 9L, 12L, 2L), Last_Col3 = c(11L, 
 NA, 20L, 3L), Last_Col4 = c(12L, 10L, 49L, 50L)), 
 class = "data.frame", row.names = c(NA, -4L))

关于将 NA 替换为具有相应列名的另一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52896877/

相关文章:

r - 包含来自不同数据帧的数据,组合不同的几何图形并带有标识数据源的图例

r - 使用二进制变量创建计数器

r - 如何根据子集函数从数据框中删除行?

r stat_density2d 由强制引入的多边形 NA

r - 逻辑回归梯度下降算法从 R 内置的 GLM 函数返回不同的系数

r - 生成数据框和向量的组合

r - 为什么 R 函数中拼写不完整的名称可以找到匹配项?

r - 如何在R中删除图中的顶点?

r - 如何从链接列表中抓取 HTML 表格

r - 在 R 中使用 causalweight 包