如果我有如下数据框
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。
答案 0 :(得分:1)
使用dplyr
,我们可以按&#39; b&#39;列并获取&#39; a&#39;的min
在summarise
内。
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的帖子中。