首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地根据值列表检查多个变量的值。

有效地根据值列表检查多个变量的值。
EN

Stack Overflow用户
提问于 2020-09-12 15:58:53
回答 2查看 93关注 0票数 1

我想要创建一个变量,它标志着一个或多个多个变量是否具有特定的值。

代码语言:javascript
复制
week  Mon  Tues  Weds  Thurs  Fri  Sat
1     jon  jon   jon   jon    mary mary
2     jane jane  jane  jane   jane jane
3     mary mary  mary  mary   mary jane

我想创建一个每周标记的二进制变量,无论哪一天是== "jon“还是"mary”,是否有一种方法可以做到这一点,而不需要创建一个长ifelse语句来单独检查每个变量呢?

代码语言:javascript
复制
week  Mon  Tues  Weds  Thurs  Fri  Sat  flag
1     jon  jon   jon   jon    mary mary 1
2     jane jane  jane  jane   jane jane 0
3     mary mary  mary  mary   mary jane 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-12 16:07:52

base解决方案:

代码语言:javascript
复制
df$flag <- +(colSums(apply(df[-1], 1, `%in%`, c("jon", "mary"))) > 0)

或者您可以使用来自dplyrdplyr

代码语言:javascript
复制
library(dplyr)

df %>%
  rowwise() %>%
  mutate(flag = +any(c_across(-week) %in% c("jon", "mary"))) %>%
  ungroup()

两人都给予:

代码语言:javascript
复制
#    week Mon   Tues  Weds  Thurs Fri   Sat    flag
# 1     1 jon   jon   jon   jon   mary  mary      1
# 2     2 jane  jane  jane  jane  jane  jane      0
# 3     3 mary  mary  mary  mary  mary  jane      1

数据

代码语言:javascript
复制
df <- structure(list(week = 1:3, Mon = c("jon", "jane", "mary"), Tues = c("jon", 
"jane", "mary"), Weds = c("jon", "jane", "mary"), Thurs = c("jon", 
"jane", "mary"), Fri = c("mary", "jane", "mary"), Sat = c("mary", 
"jane", "jane")), class = "data.frame", row.names = c(NA, -3L))
票数 1
EN

Stack Overflow用户

发布于 2020-09-12 16:04:27

您可以使用rowSums

代码语言:javascript
复制
df$flag <- +(rowSums(df[-1] == 'jon' | df[-1] == 'mary') > 0)

#  week  Mon Tues Weds Thurs  Fri  Sat flag
#1    1  jon  jon  jon   jon mary mary    1
#2    2 jane jane jane  jane jane jane    0
#3    3 mary mary mary  mary mary jane    1

如果有更多的值需要比较,并且不能单独编写,则可以使用以下任何一种方法。

代码语言:javascript
复制
more_values <- c('jon', 'mary')
df$flag <- apply(df[-1], 1, function(x) as.integer(any(x %in% more_values)))
df$flag <- +as.integer(rowSums(sapply(df[-1], `%in%`, more_values)) > 0)
df$flag <- +(Reduce(`|`, lapply(df[-1], `%in%`, more_values)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63862212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档