如何生成和排序X子元素长或更少的子集化数据帧

问题描述 投票:0回答:1

我有一个大数据框(df)。我想从这里生产df2。 df2必须填写以下标准:

1)由其中一列中的值设置的子。

2)df2的长度必须为20个或更少。

3)必须通过增加值来订购df2

我的尝试:

A <- floor(runif(100, min = 1, max = 100))
B <- floor(runif(100, min = 1, max = 100))
as.data.frame(cbind(A, B)) -> df

head(df[which(df$A < 50),], n = 20) -> df2

这没关系,但我希望输出长度为20个元素或更少。

head(df[which(df$A < 50),], n < 20) -> df2  
<=/=</< 

所有结果都没有找到'n'。

order(head(df[which(df$A < 20),], decreasing = False)) -> df2

有点工作,但产生一个列表而不是数据框。此外,当我尝试我的输出不增加。

任何帮助,将不胜感激。

r subset
1个回答
2
投票

试图在基地R的单线程中进行,但它变得非常难看所以这是一个两步解决方案

temp <- df[head(which(df$A < 50), 20), ]
temp[order(temp$A), ]

#    A  B
#4   4 24
#35  7 49
#13  9 16
#39 10 44
#1  12 41
#26 14  8
#14 15 11
#11 16 92
#31 17 17
#20 19 95
#2  20 78
#6  30 94
#16 33 66
#12 34 70
#25 35 21
#9  41 69
#15 41 28
#18 43 37
#5  48 58
#22 49 24

但是,使用dplyr,您可以在一个连锁操作中完成

library(dplyr)
df %>%
  filter(A < 50) %>%
  slice(1:20) %>%
  arrange(A)

您可以根据自己的喜好更改值50和20。

数据

set.seed(2345)
A <- floor(runif(100, min = 1, max = 100))
B <- floor(runif(100, min = 1, max = 100))
as.data.frame(cbind(A, B)) -> df
© www.soinside.com 2019 - 2024. All rights reserved.