R使用查找表使用查找的列名更新数据框中的零值

标签 r

我希望能够使用替换值查找表替换数据框中的零值,其中每一列的替换值都不同。相信下面的简单示例解释了问题和期望的结果。

# Dummy data frame
A <- seq(0,5,1)
B <- seq(5,0,-1)
C <- c(1,3,0,4,2,5)
dfr<-data.frame(A,B,C)

 A B C
 0 5 1
 1 4 3
 2 3 0
 3 2 4
 4 1 2
 5 0 5

# Lookup table with replacement values
D <- c('A','B','C')
E <- c(0.5,0.04,0.003)
lku <- data.frame(D,E)

D     E
A 0.500
B 0.040
C 0.003

# Desired answer
 A    B    C
 0.50 5.00 1.000
 1.00 4.00 3.000
 2.00 3.00 0.003
 3.00 2.00 4.000
 4.00 1.00 2.000
 5.00 0.04 5.000

因此,如果在使用查找表时在 A 列中找到零,则将零替换为 0.50,但对于 B 列,零将替换为 0.04,依此类推。除了使用循环逐列并指向查找表的相应行之外,我不确定从哪里开始?

更新

我尝试了循环解决方案无法让它工作 - 解释为什么不会有帮助。

for(i in 1:3){
  ifelse(dfr[ ,i] == 0, lku[i,2], dfr[ ,i])
}

最佳答案

使用 Map 的基本 R 选项

dfr[] <- Map(function(x, y) replace(x, x == 0, y), dfr, 
                            lku$E[match(names(dfr), lku$D)])

#    A    B     C
#1 0.5 5.00 1.000
#2 1.0 4.00 3.000
#3 2.0 3.00 0.003
#4 3.0 2.00 4.000
#5 4.0 1.00 2.000
#6 5.0 0.04 5.000

关于R使用查找表使用查找的列名更新数据框中的零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56539264/

相关文章:

r - 覆盖 R 对 .Last.value 的赋值

R:按列名的向量对数据框的列进行排序

r - 用 R 求解联立方程

r - Shiny 的 slider - 检索值 - 列表,或者..?

regex - 在R中的字符串中用 "+-"替换 "-"

r - 将 ggplot 绘图分成 3 帧

r - 为什么在我的示例中Rcpp实现比R函数慢得多?

r - 自更新以来未在传单 r map 中绘制多边形

R:计算 log(exp(...)) 的最大浮点误差

r - 使用鼠标点击 Shiny 的交互式绘图