首页 > 解决方案 > 使用R中的括号和管道进行子集/过滤

问题描述

我无法让管道和支架[]一起工作。我怀疑我不了解管道的工作原理。

我试图用方括号和竖线回答以下问题:这个国家叫什么名字,那是 1952 年最富有的国家?(数据来自包装gapminder

我努力了:

1. df[df$year == 1970,] %>% df[df$money == max(df$money),]["country"]

2. df %>% filter(year=="1970") %>% df[df$money == max(df$money),]["country"]

3. df %>% filter(year=="1970") %>% filter(money == max(df$money))

在没有管道的情况下使用它 - 所有线路单独工作。我不是在寻找解决问题的另一种方法,而是更好地理解管道和支架,并使用它们来解决问题。对于 1. 和 2. 我收到错误消息Error in xj[i] : invalid subscript type 'list',而对于 3 我得到一个让我困惑的空数据框。

标签: rfilterpipebrackets

解决方案


有几种不同的方法可以解决这个问题,它们更具可读性。但是,如果您想使用管道和括号来了解它们是如何工作的,那么下面的代码应该可以做到这一点。你快到了。您可以使用“。” 操作符,它表示要结转的管道之前最后一个进程的输出

df[df$year == 1970,] %>% 
  .[.$money == max(.$money),] %>% 
  .["country"]

推荐阅读