gpt4 book ai didi

r - 根据变量向量进行变异

转载 作者:行者123 更新时间:2023-12-02 09:11:32 25 4
gpt4 key购买 nike

我想创建一个变量,如果在多列中的任意列中找到特定值,则该变量取值 1,否则取值 0。这可以使用 ifelse 来完成,但如果列数超过...三左右,它就会变得乏味。

我可能可以编写一个自定义函数来执行此操作,但我很好奇 tidyverse 中是否存在一个优雅的解决方案。

示例代码:

library(tidyverse)

example_tib <- tibble(
var0 = 1:4,
var1 = c('a', 'h', 'o', 'v'),
var2 = c('b', 'i', 'p', 'w'),
var3 = c('c', 'j', 'q', 'x'),
var4 = c('d', 'k', 'r', 'y'),
var5 = c('e', 'l', 's', 'z'),
var6 = c('f', 'm', 't', 'a'),
var7 = c('g', 'n', 'u', 'b'),
var8 = 5:8
)

variables_interest <- sprintf("%s%d", "var", 2:7)

# This doesn't work but
# shows what I want to do

example_tib %>%
mutate(pass = ifelse(any(variables_interest) <= 'o' &
any(variables_interest) > 'g', 1, 0))

所需输出:

# A tibble: 4 x 10
var0 var1 var2 var3 var4 var5 var6 var7 var8 pass
<int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <int> <dbl>
1 1 a b c d e f g 5 0
2 2 h i j k l m n 6 1
3 3 o p q r s t u 7 0
4 4 v w x y z a b 8 0

最佳答案

不确定它是否优雅,并假设您对第 3 行的值是错误的:

w <- quo(variables_interest)
example_tib %>% bind_cols(
example_tib %>% mutate(id=row_number()) %>%
gather(k,v,UQ(w)) %>%
group_by(id) %>%
summarise(pass=as.integer(sum((v>"g")&(v<="o"))>0)) %>%
select(-id))

## A tibble: 4 x 10
# var0 var1 var2 var3 var4 var5 var6 var7 var8 pass
# <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <int> <int>
#1 1 a b c d e f g 5 0
#2 2 h i j k l m n 6 1
#3 3 o p q r s t u 7 0
#4 4 v w x y z a b 8 0

关于r - 根据变量向量进行变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51476528/

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