r - 使用 mutate_at 使用列名更新单元格值
问题描述
我正在处理调查数据。有些问题要求参与者检查适用于他们的所有选项。在我目前拥有的数据框中,每个可能的响应都有一列,如果参与者选择了该选项,则记录值为 1。例如,对于“您在工作中经历过以下哪种情绪?”这个问题,使用“无聊”、“压力”、“满足”选项,我的数据框将如下所示:
df <- data.frame(
id = seq(1,3,1),
boredom = c(NA, 1, NA),
stress = c(1, 1, 1),
contentment = c(NA, NA, NA)
)
我想用列的名称更新任何等于 1 的单元格值,这样我就有一个如下所示的数据框:
df2 <- data.frame(
id = seq(1,3,1),
boredom = c(NA, 'boredom', NA),
stress = rep('stress', 3),
contentment = rep(NA, 3)
)
然后,我可以使用 dplyr::unite 创建一个列,将参与者报告的所有情绪存储在一个列中。
我直观的做法是使用mutate_at和ifelse(),但是我不知道如何在ifelse()的调用中引用列名。例如,我想写这样的东西:
df_updated <- df %>%
mutate_at(vars(boredom:stress), funs(ifelse(. == 1, 'relevant column name', .)))
我希望有人能告诉我如何在 ifelse() 调用中访问列名。或者,如果我说错了树,也非常欢迎提供另一种方法的指导。
解决方案
试试这个:
df %>% mutate_at(vars(boredom:stress), funs(ifelse(. == 1, deparse(substitute(.)), .)))
推荐阅读
- c# - Windows 中 .Net Core 中网络驱动器更改/连接/断开的事件
- python - Python Pexpect 和 Minicom 无法按预期工作
- python - 如何附加 JSON 文件?
- java - 是否可以创建一个单独的类来保留所有 Java-XML 链接代码?
- javascript - 根据其他属性的值动态设置属性
- mysql - 错误 2013 (HY000) 试图导入 mariadb 数据库
- swift - 模块“Firebase”没有名为“functions”的成员
- c++ - 未定义对 soci::session::get_last_insert_id 的引用
- java - 菜单操作项的 setVisibility
- angular - 当我们只有一个要接收的对象时如何在Angular 8中获取数据