我有多个数据集,我用rbind合并到1个dplyr数据帧中。
GapAnalysis16 <- select(memSat16,
importance_communication_website_content,
satisfaction_communication_website_content,
status,
Year2016) %>%
rename(ComImpt=importance_communication_website_content,
ComSat = satisfaction_communication_website_content,
status = status,
year = Year2016)
GapAnalysis17July <- select(memSatJuly17,
importance_communication_website_content_JULY17,
satisfaction_communication_website_content_JULY17,
role_primary_new_JULY17,Year2017_July) %>%
rename(ComImpt=importance_communication_website_content_JULY17,
ComSat = satisfaction_communication_website_content_JULY17,
status = role_primary_new_JULY17,
year = Year2017_July)
GapAnalysis <- rbind(GapAnalysis17July,GapAnalysis16)
获得了我的新组合数据集:
ComImpt ComSat status year
1 4 2 1 1
2 NA NA 1 1
3 4 5 5 1
4 3 3 5 1
5 6 6 5 1
6 5 5 1 1
我需要它以长篇形式转换它:
GapAnalysis_LongForm <- GapAnalysis %>%
gather(key = Product,value = Score, ComSat, ComImpt)
现在有了这个:
status year Product Score
<dbl> <dbl> <chr> <dbl>
1 1. 1. ComSat 2.
2 5. 1. ComSat 5.
3 5. 2. ComSat 3.
4 1. 1. ComSat 5.
5 1. 1. ComImpt 4.
6 5. 1. ComSat 4.
我现在需要将ComSat和ComImpt重新编码为值(1&amp; 2)但是我很难过。 Recode和recode_factor给了我错误。我试图获得这样的输出:
status year Product Score
<dbl> <dbl> <chr> <dbl>
1 1. 1. 1 2.
2 5. 1. 1 5.
3 5. 2. 1 3.
4 1. 1. 1 5.
5 1. 1. 2 4.
6 5. 1. 1 4.
正确方向的任何一般点?
我很感激!!!
答案 0 :(得分:2)
我猜测您遇到了一些问题,因为您在recode_factor
之外使用mutate
。修改数据框的列时,请确保使用mutate
(在tidyverse
的上下文中)。
以下内容应该起作用并做同样的事情。
factor
功能df %>%
mutate(Product = factor(Product, levels = c("ComSat", "ComImpt"), labels = c(1L, 2L)))
recode_factor
函数df %>%
mutate(Product = recode_factor(Product, "ComSat" = 1L, "ComImpt" = 2L))
或
df3 <- df %>%
mutate_at(vars(Product), ~recode_factor(.,"ComSat" = 1L, "ComImpt" = 2L))
答案 1 :(得分:0)
如果您的data.frame中只有2个Product
代码(ComSat,ComImpt
),那么简单ifelse
将更容易提供帮助。
您需要dplyr
链中的其他步骤:mutate(Product = ifelse(Product=="ComSat", 1L, 2L))
GapAnalysis_LongForm <- GapAnalysis %>%
gather(key = Product,value = Score, ComSat, ComImpt) %>%
mutate(Product = ifelse(Product=="ComSat", 1L, 2L))
# status year Product Score
# 1 1 1 1 2
# 2 1 1 1 NA
# 3 5 1 1 5
# 4 5 1 1 3
# 5 5 1 1 6
# 6 1 1 1 5
# 7 1 1 2 4
# 8 1 1 2 NA
# 9 5 1 2 4
# 10 5 1 2 3
# 11 5 1 2 6
# 12 1 1 2 5
答案 2 :(得分:0)
修改@hpesoj626 的 mutate_at 方法:
根据 tidyverse,范围动词(_if、_at、_all)已被现有动词中的 cross() 取代(有关详细信息,请参阅 here)。
以下代码应该可以工作:
df3 <- df %>%
mutate(across(Product), ~recode_factor(.,"ComSat" = 1L, "ComImpt" = 2L))