【问题标题】:Filter multiple levels of character data过滤多级字符数据
【发布时间】:2021-08-27 18:42:52
【问题描述】:

我有一个数据框,我试图从我的数据框的两列中选择某些字符级别,但是在让语法工作/产生正确的输出时遇到了一些问题。示例数据框:

Land <- c("A", "B", "C", "A", "B", "C", "A", "A", "A") 
Activity <- c("low", "low", "high", "low", "medium", "high", "high", "high", "medium") 
df <- data.frame(Land, Activity)

我想过滤以获得土地“A”和部分活动“高”或“中”。我尝试使用以下代码在特定土地利用下进行过滤,然后得到“高”或“中”,但它只对土地“A”和活动“高”进行排序。

 df2 <- df %>% 
  filter(Land == "A") %>% 
  filter(Activity == "high" | Activity =="medium") 

代替第三行 (filter(Activity == "high" | Activity =="medium")),我还尝试了 filter(Activity == "high" &amp; Activity =="medium")filter(Activity != "low" | Activity !="none"),但它仍然无法过滤我想要的所有活动级别。如何修复我的代码以过滤这两个字符因素?

编辑: 我想要一个如下所示的表格:

Land Activity 
A     high
A     high
A     medium

编辑: 当前输出:

Land Activity 
A     high
A     high

谢谢!

【问题讨论】:

  • 能不能显示预期的
  • 我也怀疑这是不是没有加载library(dplyr)
  • 刚刚编辑了帖子以显示我的期望/想要的。我确实加载了库(dplyr)。
  • 如果是这样,你的代码给了我正确的。
  • 重启 R 确实解决了,谢谢!

标签: r filter dplyr


【解决方案1】:

如果打算同时保留“土地”的其余部分,请使用“土地”不等于“A”的 OR (|) 条件

library(dplyr)
df %>% 
    filter((Land == 'A' & Activity %in% c("high", "medium")) | Land != "A")

-输出

   Land Activity
1    B      low
2    C     high
3    B   medium
4    C     high
5    A     high
6    A     high
7    A   medium

更新

根据 OP 的 cmets,filter 正在按预期工作

df %>% 
  filter(Land == "A") %>% 
  filter(Activity == "high" | Activity =="medium") 
 Land Activity
1    A     high
2    A     high
3    A   medium

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 2012-12-06
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多