R 如何根据数据框中具有固定顶部值数的列选择行?

R 如何根据数据框中具有固定顶部值数的列选择行?,r,R,假设我有这样一个数据帧: df0 <- data.frame(x=c(-5, -4.5, -3, -2, 0, 1, 2, 3, 4, 5, 6, 7), y=letters[1:12]) df0 x y # 1 -5.0 a # 2 -4.5 b # 3 -3.0 c # 4 -2.0 d # 5 0.0 e # 6 1.0 f # 7 2.0 g # 8 3.0 h # 9 4.0 i # 10 5.0 j #

假设我有这样一个数据帧:

df0 <- data.frame(x=c(-5, -4.5, -3, -2, 0, 1, 2, 3, 4, 5, 6, 7),
                  y=letters[1:12])
df0
     x y
# 1  -5.0 a
# 2  -4.5 b
# 3  -3.0 c
# 4  -2.0 d
# 5   0.0 e
# 6   1.0 f
# 7   2.0 g
# 8   3.0 h
# 9   4.0 i
# 10  5.0 j
# 11  6.0 k
# 12  7.0 l
df1<-data.frame(x=c(-5, -4.5, -3, 5, 6, 7),
                y=c("a", "b", "c", "j", "k", "l"))
df1
#    x y
# 1  -5.0 a
# 2  -4.5 b
# 3  -3.0 c
# 4  5.0 j
# 5  6.0 k
# 6  7.0 l
我们可以用头和尾巴

我们可以用头和尾巴

这里有一个dplyr方法:

然而,这比这里的其他答案更加冗长和缓慢。使用这个答案的唯一原因是为了支持哈德利霸权

library(microbenchmark)

mplourde <- function() df0 %>% filter(!between(row_number(), 4, n()-3))
akrun <- function() rbind(head(df0,3), tail(df0,3))
ven <- function() df0[c(1:3, (nrow(df0)-2):nrow(df0)), ]
microbenchmark(mplourde(), akrun(), ven())

# Unit: microseconds
#        expr    min     lq   mean median    uq     max neval
#  mplourde() 474.69 505.19 551.39 520.30 551.2 2165.59   100
#     akrun() 253.74 275.69 301.21 291.37 310.8  746.10   100
#       ven()  38.77  48.04  53.72  51.75  58.3   91.23   100
这里有一个dplyr方法:

然而,这比这里的其他答案更加冗长和缓慢。使用这个答案的唯一原因是为了支持哈德利霸权

library(microbenchmark)

mplourde <- function() df0 %>% filter(!between(row_number(), 4, n()-3))
akrun <- function() rbind(head(df0,3), tail(df0,3))
ven <- function() df0[c(1:3, (nrow(df0)-2):nrow(df0)), ]
microbenchmark(mplourde(), akrun(), ven())

# Unit: microseconds
#        expr    min     lq   mean median    uq     max neval
#  mplourde() 474.69 505.19 551.39 520.30 551.2 2165.59   100
#     akrun() 253.74 275.69 301.21 291.37 310.8  746.10   100
#       ven()  38.77  48.04  53.72  51.75  58.3   91.23   100
slicedf0,c1:3,n-2:n是另一个dplyr选项slicedf0,c1:3,n-2:n是另一个dplyr选项
library(dplyr)
df0 %>% filter(!between(row_number(), 4, n()-3))
library(microbenchmark)

mplourde <- function() df0 %>% filter(!between(row_number(), 4, n()-3))
akrun <- function() rbind(head(df0,3), tail(df0,3))
ven <- function() df0[c(1:3, (nrow(df0)-2):nrow(df0)), ]
microbenchmark(mplourde(), akrun(), ven())

# Unit: microseconds
#        expr    min     lq   mean median    uq     max neval
#  mplourde() 474.69 505.19 551.39 520.30 551.2 2165.59   100
#     akrun() 253.74 275.69 301.21 291.37 310.8  746.10   100
#       ven()  38.77  48.04  53.72  51.75  58.3   91.23   100