【问题标题】:Filter based on set criteria [duplicate]根据设置标准过滤[重复]
【发布时间】:2021-11-16 20:40:44
【问题描述】:

我有一个名为 food.1、food.2...food.10 的 10 列列表,并且想要过滤我的数据,以了解这 10 列中的任何一列中的食物名称匹配预先指定的碳水化合物食物列表(面包、米饭、土豆、蛋糕、面团

我开始在下面编写此代码,但我确信有一种更简单的方法可以做到这一点,而不是为我想要保留的每个可能的动脉名称复制每一列。 函数会起作用吗?如何编写?

carb.df= df %>%
  filter(food.1 =="bread"|food.2 =="bread"|
           food.3=="bread"|food.4 =="bread"|
           food.5 =="bread"|food.6 =="bread"|
           food.7 =="bread"|food.8 =="bread"|
           food.9 =="bread"|food.10 =="bread"|
           food.1 =="rice"|food.2 =="rice"|
           food.3=="rice"|food.4 =="rice"|
           food.5 =="rice"|food.6 =="rice"|
           food.7 =="rice"|food.8 =="rice"|
           food.9 =="rice"|food.10 =="rice"|
           food.1 =="cake"|food.2 =="cake"|
           food.3 =="cake"|food.4 =="cake"|
           food.5 =="cake"|food.6 =="cake"|
           food.7 =="cake"|food.8 =="cake"|
           food.9 =="cake"|food.10 =="cake")

【问题讨论】:

  • 真的,解决办法就是让你的数据整洁。不要使用编号列,将数据转换为长格式,这样只有一列 food,其中当前每一行包含 10 行。
  • 更好地重塑数据。我仍然建议发布dput(df)dput(head(df, n=10)),我们可以使用它们。
  • 非常感谢。我显然是想多了。现在排序

标签: r function dplyr


【解决方案1】:

你可以使用if_any -

library(dplyr)

values <- c('bread', 'rice', 'cake')
result <- df %>% filter(if_any(starts_with('food'), ~. %in% values))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多