Subsetting/filtering 在 R 中使用括号和管道

Subsetting/filtering using brackets and pipes in 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 我得到一个让我感到困惑的空数据框。

我想你快到了。

试试这个:

df %>% filter(year == 1970) %>% filter(money == max(money))

您不需要 df$ 部分。最后一个选项可能 returns 和空 df 因为总数据框中的最高金额是在 1970 年以外的年份观察到的。而且年份可能是数字,所以应该在没有引号的情况下使用。

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

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