我有一个数据框,我在其中重新编码了几列,以便将999设置为NA
<div id="chart1"></div>
我想使用mutate_at()和一系列列和recode()而不是if_else(),但我仍然坚持如何给它条件。基于一些mutate_all示例,我认为像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))
= NA这样的东西 - 但是我还需要NA来匹配.x的类型,我不确定如何使它成为类型敏感的
我试过了:
999
但我得到一个警告“未被替换的值被视为NA为.x不兼容。请详细说明替换或提供.default”我可以看到它的数字列,但不是整数列y2“
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))))
答案 0 :(得分:2)
现在funs
在dplyr中已贬值,这是新的处理方法:
z <- y %>%
mutate_if(is.integer, as.numeric) %>%
mutate_at(vars(y1:y2), list(~recode(.,`999` = NA_real_)))
将funs
替换为list
,并在~
之前插入recode
。
答案 1 :(得分:0)
如果您尝试将某些内容重新编码为NA,则na_if()函数也应该起作用。
答案 2 :(得分:0)
当前基于dplyr documentation:
across()取代了诸如summarise_at(),summarise_if()和summarise_all()之类的“作用域变体”。
因此,现在建议改为使用mutate
和across
。
就像Chris LeBoa said一样,如果您只想将烦人的值转换为NA
,则函数na_if()
可能是最佳选择:
y <- data.frame(y1=c(1,2,999,3,4), y2=c(1L, 2L, 999L, 3L, 4L), y3=c(T,T,F,F,T))
y
y1 y2 y3
1 1 1 TRUE
2 2 2 TRUE
3 999 999 FALSE
4 3 3 FALSE
5 4 4 TRUE
z <- y %>%
mutate(across(
y1:y2,
~na_if(., 999)
))
z
y1 y2 y3
1 1 1 TRUE
2 2 2 TRUE
3 NA NA FALSE
4 3 3 FALSE
5 4 4 TRUE
类似地,如果您确实要在多个列中recode
个值,则可以遵循example中的bcarothers:
df1 <- tibble(Q7_1=1:5,
Q7_1_TEXT=c("let's","see","grogu","this","week"),
Q8_1=6:10,
Q8_1_TEXT=rep("grogu",5),
Q8_2=11:15,
Q8_2_TEXT=c("grogu","is","the","absolute","best"))
df2 <- df1 %>%
mutate(across(
starts_with("Q8") & ends_with("TEXT"),
~recode(., "grogu"="mando")
))