gpt4 book ai didi

使用 dplyr 重新编码多列

转载 作者:行者123 更新时间:2023-12-04 04:58:09 25 4
gpt4 key购买 nike

我有一个数据框,我在其中重新编码了几列,以便将 999 设置为 NA

dfB <-dfA %>%
mutate(adhere = if_else(adhere==999, as.numeric(NA), adhere)) %>%
mutate(engage = if_else(engage==999, as.numeric(NA), engage)) %>%
mutate(quality = if_else(quality==999, as.numeric(NA), quality)) %>%
mutate(undrstnd = if_else(undrstnd==999, as.numeric(NA), undrstnd)) %>%
mutate(sesspart = if_else(sesspart==999, as.numeric(NA), sesspart)) %>%
mutate(attended = if_else(attended>=9, as.integer(NA), attended))

我想使用 mutate_at() 和一系列列和 recode() 而不是 if_else(),但我坚持如何给它条件。我认为类似 999 = NA 基于一些 mutate_all 示例——但我还需要 NA 来匹配 .x 的类型,但我不确定如何让它成为类型敏感的

我试过:
y <- data.frame(y1=c(1,2,999,3,4), y2=c(1L, 2L, 999L, 3L, 4L), y3=c(T,T,F,F,T))
z <- y %>%
mutate_at( vars(y1:y2), funs(recode(.,`999` = as.numeric(NA))))

但是我收到一条警告“未替换的值被视为 NA 作为 .x 不兼容。请详尽地指定替换或提供 .default”,我可以看到它是针对数字列的,但不是针对整数列 y2 的
> z
y1 y2 y3
1 1 NA TRUE
2 2 NA TRUE
3 NA NA FALSE
4 3 NA FALSE
5 4 NA TRUE

最佳答案

我认为这与列类型有关。我加了 mutate_if将所有整数列转换为数字,然后将重新编码值设置为 NA_real_ .它似乎工作。

library(dplyr)

y <- data.frame(y1=c(1,2,999,3,4), y2=c(1L, 2L, 999L, 3L, 4L), y3=c(T,T,F,F,T))

z <- y %>%
mutate_if(is.integer, as.numeric) %>%
mutate_at(vars(y1:y2), funs(recode(.,`999` = NA_real_)))
z
# y1 y2 y3
# 1 1 1 TRUE
# 2 2 2 TRUE
# 3 NA NA FALSE
# 4 3 3 FALSE
# 5 4 4 TRUE

关于使用 dplyr 重新编码多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com