我有一张大型CSV,其中包含来自不同地点的医疗调查结果(该位置是数据中存在的因素)。由于某些分析特定于某个位置并且为了方便起见,我想仅从这些位置提取具有行的子帧。碰巧该位置是第一个字段所以是的,我可以通过对CSV行进行排序来实现,但我想学习如何在R中进行操作,因为我确信我需要将其用于其他列。
因此,简而言之,问题是:给定数据框foo,如何创建另一个数据框条,其中只包含来自foo的行foo$location = 'there'
?
答案 0 :(得分:93)
以下是两种主要方法。我更喜欢这个因为它的可读性:
bar <- subset(foo, location == "there")
请注意,您可以使用&
和|
将多个条件字符串组合在一起以创建复杂的子集。
第二种是索引方法。您可以使用数字或布尔切片为R中的行编制索引。 foo$location == "there"
会返回T
和F
值的向量,其长度与foo
的行长度相同。您可以这样做只返回条件返回true的行。
foo[foo$location == "there", ]
答案 1 :(得分:1)
只是为了扩展上面的答案,您还可以为列建立索引,而不是指定列名称,这也可能取决于您的工作。鉴于您的位置是第一个字段,因此它看起来像这样:
bar <- foo[foo[ ,1] == "there", ]
这很有用,因为您可以对列值执行操作,例如循环遍历特定列(也可以通过索引行号来执行相同操作)。
如果您需要对多个列执行某些操作,这也很有用,因为您可以随后指定一系列列:
foo[foo[ ,c(1:N)], ]
或您期望的特定列。
foo[foo[ ,c(1,5,9)], ]