【发布时间】:2021-10-25 19:37:50
【问题描述】:
我想跨多个列重新编码大量变量。这是一个例子 df
df <- data.frame(
id_number = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
age = c(10, 11, 12, 13, 14, 15, 16, 17, 18, 19),
abc1 = c(501, 502, 503, 504, 505, 506, 507, 508, 509, 510),
abc2 = c(501, 502, 501, 501, 502, 501, 502, 503, 501, 502),
abc3 = c(501, 506, 501, 501, 510, 501, 510, 501, 501, 501),
abc4 = c(507, 505, 501, 501, 501, 501, 501, 501, 501, 501)
)
df
列 abc1:abc4 的值为 501:510,我正在尝试一次将所有这些列的 501:508 重新编码为 91、509 为 92 和 510 为 93。 这是我尝试过的-
library(dplyr)
df1 <-
df %>%
mutate(across(
abc1:abc4,
~ recode(
.x,
`501:508` = 91L,
`509` = 92L,
`510` = 93L
)
))
但我得到一个错误
x 由强制引入的 NA
ℹ 输入..1 是across(abc1:abc4, ~recode(.x, `501:508` = 91L, `509` = 92L, `510` = 93L)).NAs 由coercionProblem 引入mutate() 输入..1。
x 被视为 NA 的未替换值,因为 .x 不兼容。请详细指定替换或提供.default
但是,如果我一个一个地更改值,它会起作用,但我想一次全部完成,因为我的真实数据有一个很长的值列表。我是不是在这部分做错了什么
`501:508` = 91L,
谢谢!
上面的后续问题
假设 abc1:abc4 的值更大,并且还有一组 1-175 范围内的值。 abc1:abc4 = c(1:175, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510)。我只是调整了上一个示例中的值来说明这一点。
df1 <- data.frame(
id_number = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
age = c(10, 11, 12, 13, 14, 15, 16, 17, 18, 19),
abc1 = c(14, 158, 170, 504, 505, 506, 507, 508, 509, 510),
abc2 = c(501, 502, 501, 501, 45, 501, 502, 59, 501, 100),
abc3 = c(89, 506, 12, 501, 510, 13, 510, 501, 11, 501),
abc4 = c(32, 505, 35, 501, 501, 56, 501, 12, 501, 501)
)
df1
现在我想将它们一起重新编码,其中 1:175 = 90、501:508 = 91、509 = 92 和 510 - 93 一次跨列 abc1:abc4。 @akrun 的答案中的“nm1”如何设置在这里。有没有更简单的方法来做到这一点?谢谢!
【问题讨论】: