基于参考行的数据帧行的正确值

Correct values of data-frame rows based on reference row

我有一个包含 K 列的大型数据框,其中在未知列索引中我有字符“X”。我希望也用 K 列替换基于参考行的一些值。

我可以使用 for 循环轻松完成:

ref_r = mu_df[1, ]
for (n in row.names(mu_df)) {
    idx = which(mu_df[n, ] == "X")
    mu_df[n, idx] = ref_r[idx]
}

以上代码找到“X”出现的索引,并将它们替换为 ref_row.

中相同位置的值

我想对其进行优化,我曾考虑使用 apply 系列中的一款,但我无法改进任何东西。

一个例子是:

mu_df = data.frame(c1=c("A", "-", "X", "-", "B"), c2=c("I", "G", "R", "X", "S"), c3=c("-", "K", "-", "-", "B"), c4=c("Q", "-", "L", "-", "X"), row.names = c("t1", "t2", "t3", "t4", "t5"))

预期的输出是:

   c1 c2 c3 c4
t1  A  I  -  Q
t2  -  G  K  -
t3  A  R  -  L
t4  -  I  -  -
t5  B  S  B  Q

我如何优化它,因为我必须以这种方式处理数千个这样的数据帧?

非常感谢您的帮助。

我们可以使用 whicharr.ind = TRUE 得到 row/column 每个值的索引 'X'.

ref_r <- unlist(mu_df[1, ])
mat <- which(mu_df == 'X', arr.ind = TRUE)
mu_df[mat] <- ref_r[mat[, 2]]

#   c1 c2 c3 c4
#t1  A  I  -  Q
#t2  -  G  K  -
#t3  A  R  -  L
#t4  -  I  -  -
#t5  B  S  B  Q