R - 从因子中选择元素

时间:2015-10-02 10:54:57

标签: r dataframe subset element

如果我有如下数据框

   a     b
1   5   red
2  11   red
3   7   red
4   1   red
5   3 green
6   8 green
7  12 green
8   6 green
9   2  blue
10  9  blue
11 10  blue
12  4  blue

如何从每个因素中选择某个元素?

例如,我如何选择......

  • 每种颜色的第三个元素。

  • 每种颜色的最小值。

我想将结果显示为数据框,显示每种颜色的结果。

喜欢这个

     result
red        1
green      3
blue       2

以下是我目前的尝试

  • 每种颜色的最小值。

    a <- sample(1:12,12) b <- gl(3, 4, labels = c("red", "green", "blue")) df <- data.frame(a ,b) result <- tapply(df$a, df$b, min) data.frame(result)

这似乎运作良好,并给我我之后的结果。

  • 每种颜色的第三个元素

    tapply(df $ a,df $ b,FUN = function(x)x [3])

请问解决方案只能使用base-package。

1 个答案:

答案 0 :(得分:1)

使用dplyr,我们可以按&#39; b&#39;列并获取&#39; a&#39;的minsummarise内。

library(dplyr)
df1 %>%
    group_by(b) %>%
    summarise(a= min(a)) #or
    #slice(which.min(a))

获得&#39; a&#39;的第三个值。对于每个&#39;&#39;,请使用slice

df1 %>% 
    group_by(b) %>%
    slice(3)

如果我们只需要base R解决方案,则ave有一种方法可以获得第三个元素。按&#39; b&#39;分组,我们得到序列,与3比较得到逻辑索引,并对原始数据集进行子集化。

df1[with(df1, ave(seq_along(a), b, FUN=seq_along)==3),]

或者tapply没有匿名函数调用

with(df1, tapply(a, b, FUN=`[`, 3))

注意:用于查找base R的{​​{1}}解决方案已在OP的帖子中。