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"]
我无法让管道和支架 []
一起工作。我怀疑我不了解管道的工作原理。
我正在尝试使用括号和竖线回答以下问题:
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"]