我想在 R 中一次重新编码多个变量。变量在一个更大的数据框中。以下是一些示例数据:

 z <- data.frame (A = c(1,2,300,444,555),
              B = c(555,444,300,2,1),
              C = c(1,2,300,444,555),
              D = c(1,2,300,444,555))

我想做的是将所有等于 300 的值重新编码为 3,将 444 重新编码为 4,将 555 重新编码为 5。

我想我可以在列表中做到这一点。这是我尝试过的:
example_list  = list(c("A", "B", "C", "D"))

example_list <- apply(z[,example_list], 1, function(x) ifelse(any(x==555, na.rm=F), 0.5,
                                                              ifelse(any(x==444), 0.25),
                                                              ifelse(any(x==300), 3, example_list)))

我收到此错误:
Error during wrapup: invalid subscript type 'list'

然后尝试使用“lapply”,我得到了这个错误:
Error during wrapup: '1' is not a function, character or symbol

即便如此,我也不确定这是执行此操作的最佳方法……我只想避免为多个变量逐行执行此操作。任何建议都会很棒,因为我是 R 的新手并且不完全理解我做错了什么。

我确实在 SO: Question 上找到了类似的问题,但我不确定如何将其应用于我的具体问题。

最佳答案

这看起来有点笨拙,但它有效:

mutate_cols <- c('A', 'B')

z[, mutate_cols] <- as.data.frame(lapply(z[, mutate_cols], function(x) ifelse(x == 300, 3,
                                                                              ifelse(x == 444, 4,
                                                                                     ifelse(x== 555, 5, x)))))

10-07 22:36