子集在数据帧中首先出现n个特定值

时间:2016-01-14 16:58:46

标签: r

假设我有一个矩阵(或数据帧):

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  4  9
3  9  6
3  1  2

我很清楚如何拉出所有以“3”开头的行,并且很清楚如何拉出以“3”开头的第一行。

但总的来说,如何提取以“3”开头的前n行?

此外,我如何只选择第3和第4次出现,如下所示:

3  1  2
3  8  6

3 个答案:

答案 0 :(得分:5)

无需额外的包裹:

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.tablesee this answer非常有效地执行此操作,以便对不同data.table方法的大型数据集进行速度比较:< / p>

setDT(mydf)[V1==3, head(.SD,3)]
# or:
setDT(mydf)[V1==3, .SD[1:3]]

答案 1 :(得分:2)

您可以使用dplyr执行类似的操作,以提取该列的每个唯一值的前三行:

library(dplyr)
df %>% arrange(columnName) %>% group_by(columnName) %>% slice(1:3)

如果您想在该列的值中仅提取三行,则可以尝试:

df %>% filter(columnName == 3) %>% slice(1:3)

如果您想要特定的行,您可以提供切片为c(3, 4),例如。

答案 2 :(得分:1)

我们也可以使用URL

...searchModel.MinPrice=₹2%2C189%2C090.00&searchModel.MaxPrice=₹5%2C772%2C480.00

更新

如果我们还需要在subset

的行下面提取一行
head(subset(mydf, V1==3),3)