我想在 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)))))