gpt4 book ai didi

r - 如何根据 dplyr 中多列的匹配生成列?

转载 作者:行者123 更新时间:2023-12-02 01:26:47 25 4
gpt4 key购买 nike

在跨多个列使用条件语句时,我不知道如何使用 dplyr 生成新列。

给定一些数据

library(dplyr)
a <- data.frame(var1 = c("one", "two", "three"), var2 = c("three", "one", "three"), var3 = c("three", "two", NA))
> a
var1 var2 var3
1 one three three
2 two one two
3 three three <NA>

我想计算一个匹配一组条件的新列(无论是 "one""two" 还是 "three" 存在或不存在;如果存在,返回任意值 123),按优先级排序,其中 “one” 的优先级最高,“three” 的优先级最低(即,返回的向量应为 1 1 3)。

我的处理方式是

a %>%
mutate(new_variable = case_when(
"one" %in% across(starts_with("var")) ~ 1,
"two" %in% across(starts_with("var")) ~ 2,
"three" %in% across(starts_with("var")) ~ 3,
TRUE ~ NA))

这显然行不通,我怀疑它会搜索完整的三列匹配项(如果确实如此)。 tidyverse 有办法做到这一点吗?谢谢!

最佳答案

基础 R 解决方案:

mapping <- c("one" = 1, "two" = 2, "three" = 3)

apply(a, 1, \(x) min(mapping[x], na.rm = TRUE))

#> [1] 1 1 3

关于r - 如何根据 dplyr 中多列的匹配生成列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74386285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com