r - 在 R 数据框中的多列中查找一列中的匹配值
问题描述
我有一个来自调查的数据框,其中答案选择出现的顺序是随机的,因此我们可以想象这个数据框:
example_df <- data.frame(
Choice = c ('A', 'B', 'A', 'C'),
Option1 = c('A', 'A', 'C', 'B'),
Option2 = c('B', 'C', 'A', 'A'),
Option3 = c('C', 'B', 'B', 'C'),
stringsAsFactors = FALSE
)
看起来像这样:
choice Option1 Option2 Option3
A A B C
B A C B
A C A B
C B A C
我想要返回的是数据框中的一个新列,其中新列中的值是 Choice 中的值出现的列的名称。
在示例中,新列将是:
上面的示例 df 将生成这个新列:
Option1
Option3
Option2
Option3
解决方案
我们可以用max.col
example_df$newcol <- names(example_df)[-1][max.col(example_df[-1] ==
example_df$Choice)]
-输出
example_df
# Choice Option1 Option2 Option3 newcol
#1 A A B C Option1
#2 B A C B Option3
#3 A C A B Option2
#4 C B A C Option3
或与tidyverse
library(dplyr)
example_df %>%
rowwise %>%
mutate(newcol = names(.)[-1][match(Choice,
c_across(starts_with('Option')))]) %>%
ungroup
-输出
# A tibble: 4 x 5
# Choice Option1 Option2 Option3 newcol
# <chr> <chr> <chr> <chr> <chr>
#1 A A B C Option1
#2 B A C B Option3
#3 A C A B Option2
#4 C B A C Option3
推荐阅读
- powershell - 在函数触发器上显示和隐藏文本
- axapta - 在查询 addRange AX2012 中只选择一个
- mediapipe - Mediapipe:如何正确释放 MPPGraph
- clips - 如何在 CLIPS 中进行 OR 和 AND 运算符?
- sql-server - 重新附加分离的数据库时权限正确错误
- resources - 位操作资源
- javascript - 图表 js - 将宽度设置为特定条形
- buffer - 缓冲点并将它们重叠以计算面积
- c - 双链表中的标头结构不起作用,可能是 addNode 函数错误?
- python - RuntimeError: You must setup() the GPIO channel first (4x4 Numpad on Raspberry Pi)