如何根据涉及字段的条件提取数据帧的子集?

wis*_*ame 59 r subset dataframe r-faq

我有一个大型CSV,其中包含来自不同位置的医疗调查结果(位置是数据中存在的因素).由于某些分析特定​​于某个位置并且为了方便起见,我想仅从这些位置提取具有行的子帧.碰巧该位置是第一个字段所以是的,我可以通过对CSV行进行排序来实现,但我想学习如何在R中进行操作,因为我确信我需要将其用于其他列.

所以,简而言之,问题是:给定一个数据框foo,如何创建另一个数据框条,它只包含来自foo的行foo $ location ='there'?

非常感谢.

JoF*_*wld 97

以下是两种主要方法.我更喜欢这个因为它的可读性:

bar <- subset(foo, location == "there")
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用&|将许多条件字符串组合在一起以创建复杂的子集.

第二种是索引方法.您可以使用数字或布尔切片为R中的行编制索引.foo$location == "there"返回一个矢量TF值,其长度与行的长度相同foo.您可以这样做只返回条件返回true的行.

foo[foo$location == "there", ]
Run Code Online (Sandbox Code Playgroud)

  • 。@ JoFrhwld-不是subset()不是首选方法吗?详细讨论[此处](/sf/ask/690206331/) (2认同)

Sta*_*eek 6

只是为了扩展上面的答案,您还可以对列进行索引,而不是指定列名称,这也可能很有用,具体取决于您正在做什么。鉴于您的位置是第一个字段,它看起来像这样:

    bar <- foo[foo[ ,1] == "there", ]
Run Code Online (Sandbox Code Playgroud)

这很有用,因为您可以对列值执行操作,例如循环特定列(您也可以通过索引行号来执行相同的操作)。

如果您需要对多个列执行某些操作,这也很有用,因为您可以指定一系列列:

    foo[foo[ ,c(1:N)], ]
Run Code Online (Sandbox Code Playgroud)

或者如您所期望的特定列。

    foo[foo[ ,c(1,5,9)], ]
Run Code Online (Sandbox Code Playgroud)