如何解决雄辩的R解决方案,基于一个行值更改多个行值
长时间潜伏,第一次海报。我对R比较陌生,正在清理200行调查数据集。该调查使用了大量分支,并且在参与者未收到问题的情况下返回NA,从而使我的缺失数据分析失败。我花了一天半的时间试图找出一种有效的解决方案(对于循环,如果条件,请使用filter(dplyr),mutate(dplyr),case_when)。我选择了使用mutate()的解决方案,但我知道有一种更好的方法。
这是一个可复制的数据框,用作调查数据
df <- data.frame(attsess1 = c(1,1,-99,-99),attsess2 = c(-99,1),s1satis = c(1,NA,NA),s1time = c(1,s1qual = c(1,s2satis = c(NA,s2time = c(NA,1))
基本上,如果attsess1等于-99,那么我希望s1satis,s1time,s1qual中的以下相应行将其NA更改为-99。相同的逻辑适用于attsess2和s2satis和s2time。
以下代码是我使用的代码。它可以工作,但是需要太多行,这对于包含大量变量的大型数据集可能会出现问题
library(dplyr)
df1 <- df %>% mutate(s1satis = case_when(attsess1 == -99 ~ -99)) %>% mutate(s1time = case_when(attsess1 == -99 ~ -99)) %>% mutate(s1qual = case_when(attsess1 == -99 ~ -99)) %>% mutate(s2satis = case_when(attsess2 == -99 ~ -99)) %>% mutate(s2time = case_when(attsess2 == -99 ~ -99))
我尝试使用mutate_at和case_when,但收到此错误消息:必须是双精度矢量,而不是整数矢量。我还尝试了嵌套if条件的循环,但是我不记得收到的错误消息。我还遇到了几个论坛,在这些论坛上,作者提倡为dplyr函数替换循环-谁能对此提供更多见解?
感谢您的帮助!
解决方法
请确保您的dplyr
版本已更新,并且该方法可行:
df %>%
mutate(
across(starts_with("s1"),~ case_when(attsess1 == -99 ~ -99,TRUE ~ .)),across(starts_with("s2"),~ case_when(attsess2 == -99 ~ -99,TRUE ~ .))
)
# attsess1 attsess2 s1satis s1time s1qual s2satis s2time
# 1 1 -99 1 1 1 -99 -99
# 2 1 -99 1 1 1 -99 -99
# 3 1 1 1 1 NA NA 1
# 4 -99 1 -99 -99 -99 1 1
# 5 -99 1 -99 -99 -99 1 1
尽管我不确定您希望得到的结果,但请参阅我对您问题的评论。
,如果要获取整个数据集并将所有promises
替换为-99,可以使用以下方法:
NA
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。