在 R 中使用括号和管道进行子集化/过滤

Emi*_*sen 0 brackets r pipe filter

我无法让管道和支架[]一起工作。我怀疑我不明白管道是如何工作的。

我试图用括号和竖线来回答以下问题: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))
Run Code Online (Sandbox Code Playgroud)

无需管道即可使用 - 所有线路均独立工作。我并不是在寻找问题的另一种解决方案,而是为了更好地理解管道和支架,并利用它们来解决问题。对于 1. 和 2. 我得到的错误是Error in xj[i] : invalid subscript type 'list',而对于 3 我得到一个空的数据框,这让我很困惑。

小智 5

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

df[df$year == 1970,] %>% 
  .[.$money == max(.$money),] %>% 
  .["country"]
Run Code Online (Sandbox Code Playgroud)