r - 根据另一列中的值从数据框中的列中选择
问题描述
我有一个数据框如下:
dataDF <- data.frame(
id = 1:5,
to_choose = c('red', 'blue', 'red', 'green', 'yellow'),
red_value = c(1,2,3,4,5),
blue_value = c(6,7,8,9,10),
yellow_value = c(11,12,13,14,15)
)
id to_choose red_value blue_value yellow_value
1 red 1 6 11
2 blue 2 7 12
3 red 3 8 13
4 green 4 9 14
5 yellow 5 10 15
我想创建一个新列value
,它是基于 to_choose 列的相应列的值。
我可以这样ifelse
做
mutate(dataDF,
value = ifelse(to_choose == 'red', red_value,
ifelse(to_choose == 'blue', blue_value,
ifelse(to_choose == 'yellow', yellow_value, NA))))
给予
id to_choose red_value blue_value yellow_value value
1 red 1 6 11 1
2 blue 2 7 12 7
3 red 3 8 13 3
4 green 4 9 14 NA
5 yellow 5 10 15 15
但是,如果有一种更简单的方式来做到这一点
mutate(dataDF, value = paste(to_choose, 'value', sep = '_'))
解决方案
dataDF %>%
gather(var, value , 3:5) %>%
mutate(var = gsub('_value', '', var)) %>%
filter(to_choose == var)
推荐阅读
- c# - 无法从未打开的数据库创建命令
- java - 制作签名的apk时无法恢复密钥
- c# - 使用 CefSharp 显示本地 PDF 文件
- c# - 访问请求标头 AngularJS 和 c#
- node.js - 哪种扩展 nodejs 应用程序的方式更好?
- rest - 命令需要以管理员权限 Ejabberd Rest Api 运行?
- rest - 我们如何通过 PHP Curl 使用 JIRA rest attachments api 附加多个图像?
- c# - 刷新页面以显示当前时间的统计信息
- c++ - 如何从 C++ 中分配的枚举中获取随机值?
- windows - 在同一个 shell Windows 中执行多个命令