假设我有一个矩阵(或数据框):
1 5 8
3 4 9
3 9 6
6 9 3
3 1 2
4 7 2
3 8 6
3 2 7
我想选择第一个条目为"3"的前三行,如下所示:
3 4 9
3 9 6
3 1 2
我知道如何提取以“3”开头的所有行,也知道如何提取以“3”开头的第一行。
但是一般来说,我该如何提取以“3”开头的前n行呢?
此外,我该如何选择第三个和第四个出现的行,如下所示:
3 1 2
3 8 6
假设我有一个矩阵(或数据框):
1 5 8
3 4 9
3 9 6
6 9 3
3 1 2
4 7 2
3 8 6
3 2 7
我想选择第一个条目为"3"的前三行,如下所示:
3 4 9
3 9 6
3 1 2
我知道如何提取以“3”开头的所有行,也知道如何提取以“3”开头的第一行。
但是一般来说,我该如何提取以“3”开头的前n行呢?
此外,我该如何选择第三个和第四个出现的行,如下所示:
3 1 2
3 8 6
无需额外的包:
mydf[mydf$V1==3,][1:3,]
导致结果:
V1 V2 V3
2 3 4 9
3 3 9 6
5 3 1 2
mydf[mydf$V1==3,][3:4,]
# or:
mydf[mydf$V1==3,][c(3,4),]
使用的数据:
mydf <- structure(list(V1 = c(1L, 3L, 3L, 6L, 3L, 4L, 3L, 3L),
V2 = c(5L, 4L, 9L, 9L, 1L, 7L, 8L, 2L),
V3 = c(8L, 9L, 6L, 3L, 2L, 2L, 6L, 7L)),
.Names = c("V1", "V2", "V3"), class = "data.frame", row.names = c(NA, -8L))
额外加分项:除了使用 dplyr
,你也可以使用 data.table
非常高效地完成这个任务(在大型数据集上,不同的 data.table
方法的速度比较请参见这个答案):
setDT(mydf)[V1==3, head(.SD,3)]
# or:
setDT(mydf)[V1==3, .SD[1:3]]
library(dplyr)
df %>% arrange(columnName) %>% group_by(columnName) %>% slice(1:3)
df %>% filter(columnName == 3) %>% slice(1:3)
如果您想要特定的行,可以提供切片 c(3, 4)
,例如。
subset
。head(subset(mydf, V1==3),3)
如果我们需要提取在V1==3
的行下面一行的数据,
i1 <- with(mydf, V1==3)
mydf[sort(unique(c(which(i1),pmin(which(i1)+1L, nrow(mydf))))),]