问题描述
长时间潜伏,第一次海报。我对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函数替换循环-谁能对此提供更多见解?
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)