R按因子或整数列出数据帧中的前n个条目

时间:2019-04-12 10:47:25

标签: r sorting dataframe rank

我想列出一个因子或整数每个级别在数据框中的前n个条目。这是我的代码:

https://stackoverflow.com/questions/44230452/how-to-use-material-dropdown-select-in-angular-dart
https://dart-lang.github.io/angular_components/#/material_dropdown_select

这可以完成工作,但是我不想为每个级别/整数都明确地有一个head语句。谢谢。

4 个答案:

答案 0 :(得分:2)

在基数R中,有一种称为tapply的分组方法:

with(x.df, stack(tapply(prob, index, head, 3)))
#     values ind
#1 0.9045300   1
#2 0.7651376   1
#3 0.3631891   1
#4 0.9471318   2
#5 0.9206743   2
#6 0.7675069   2
#7 0.9866379   3
#8 0.9149754   3
#9 0.7862320   3

还有by的{​​{1}}函数:

data.frame

产生相同的结果

答案 1 :(得分:1)

假设您的数据框以您想要的方式排序,那么您可以执行以下操作:

library(dplyr)

x.df %>%
  group_by(index) %>%  # for each index
  slice(1:3) %>%       # get top 3 rows
  ungroup()            # forget the grouping

# # A tibble: 9 x 2
#   index  prob
#   <dbl> <dbl>
# 1     1 0.943
# 2     1 0.461
# 3     1 0.251
# 4     2 0.739
# 5     2 0.697
# 6     2 0.695
# 7     3 0.968
# 8     3 0.915
# 9     3 0.635

答案 2 :(得分:1)

假设它是无序的

df = pd.DataFrame([['x','x','x','y','y','y'],['a','a','b','b','c','c'],
                   [0,0,3,4,5,6],[1,1,1,1,1,1],[0,0,4,6,2,8]],
                   ).transpose()
df.columns = ['col1','col2','col3','col4','col5']

weighted_average = lambda x: np.average(x, weights=df.loc[x.index, 'col3'])
averages = df.groupby(['col1','col2']).agg({'col3':'sum', 
                               'col4':'sum', 
                               'col5': weighted_average})

答案 3 :(得分:1)

使用data.table软件包的便捷解决方案-

> setDT(x.df)[,head(.SD,3),by=index]

输出-

index      prob
1:     1 0.7863076
2:     1 0.7103228
3:     1 0.5657803
4:     2 0.9939695
5:     2 0.7517839
6:     2 0.7348664
7:     3 0.9260537
8:     3 0.5889305
9:     3 0.5557626

注意-如果未订购您的prob,请使用此-

> setDT(x.df)[order(-prob),head(.SD,3),by=index]