我有一个如下所示的数据集:
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/