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