在 R 中选择中间 n 行



我在R中有一个data.table,说df。

 row.number <- c(1:20)
 a <- c(rep("A", 10), rep("B", 10))
 b <- c(sample(c(0:100), 20, replace = TRUE))
 df <-data.table(row.number,a,b)
 df
   row.number a  b
1           1 A 14
2           2 A 59
3           3 A 39
4           4 A 22
5           5 A 75
6           6 A 89
7           7 A 11
8           8 A 88
9           9 A 22
10         10 A  6
11         11 B 37
12         12 B 42
13         13 B 39
14         14 B  8
15         15 B 74
16         16 B 67
17         17 B 18
18         18 B 12
19         19 B 56
20         20 B 21

我想在按 b 列的递增顺序排列记录后,从中间取"n"行(例如 10(。

使用 setorder 进行排序,.N进行筛选:

setorder(df, b)[(.N/2 - 10/2):(.N/2 + 10/2 - 1), ]
   row.number a  b
1:         11 B 36
2:          5 A 38
3:          8 A 41
4:         18 B 43
5:          1 A 50
6:         12 B 51
7:         15 B 54
8:          3 A 55
9:         20 B 59
10:         4 A 60

您可以使用以下代码

library(data.table)
set.seed(9876) # for reproducibility
# your data
row.number <- c(1:20)
a <- c(rep("A", 10), rep("B", 10))
b <- c(sample(c(0:100), 20, replace = TRUE))
df <- data.table(row.number,a,b)
df
# define how many to select and store in n
n <- 10
# calculate how many to cut off at start and end
n_not <- (nrow(df) - n )/2
# use data.tables setorder to arrange based on column b
setorder(df, b)
# select the rows wanted based on n
df[ (n_not+1):(nr-n_not), ]

请让我知道这是否是您想要的。

最新更新