【发布时间】:2014-12-16 15:15:27
【问题描述】:
我在 R 中遇到了一个简单的问题。我正在处理一个大数据集,我正在尝试选择任何符合特定条件的行,以及数据框中上面的两行和下面的两行。这是我的数据的样子
df <- structure(c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21",
"22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32",
"33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43",
"44", "45", "46", "47", "48", "49", "50", "a", "b", "a", "a",
"a", "b", "a", "a", "a", "b", "a", "a", "a", "a", "a", "a", "a",
"a", "a", "b"), .Dim = c(10L, 7L), .Dimnames = list(NULL, c("1",
"2", "3", "4", "5", "6", "7")))
我正在寻找第 6 列中带有“b”和第 7 列中带有“a”的实例。可以通过以下命令选择这些实例:
rows <- df[which(df[,6] == "b"& df[,7] =="a"),]
但我不确定如何选择两个更高和两个更低的实例(尤其是符合条件的第一个命中有一个更高的实例)。这应该是基本的,但我想不出一个好的方法来做到这一点。有什么想法吗?
谢谢
【问题讨论】:
-
这里我得到的索引是行
2 and 6。根据您的情况,应该选择其他哪些行? -
没错,2和6符合条件。我期待选择每个命中的后续两个较高和两个较低实例(如果它们存在)。所以选择的行应该是 1,2,3,4(因为 2 是命中)和 4,5,6,7,8(因为 6 是命中)。结果将是与第 1 到第 8 行相同的数据框。这有意义吗?
标签: r dataframe selection rows subset