【问题标题】:subsetting a dataframe by a condition in R [duplicate]通过R中的条件对数据框进行子集[重复]
【发布时间】:2016-02-12 14:22:21
【问题描述】:

我有以下带有主题 ID 的数据。

V1
1   2
2   2
3   2
4   2
5   2
6   2
7   2
8   2
9   2
10  2
11  2
12  2
13  2
14  2
15  2
16  4
17  4
18  4
19  4
20  4
21  4
22  4
23  4
24  4

我想对 V1 == 4 的所有数据行进行子集化。这样我可以看到哪些观察与主题 4 相关。

例如,正确的输出应该是

16  4
17  4
18  4
19  4
20  4
21  4
22  4
23  4
24  4

但是,子集后给出的输出并没有给我正确的行。它只是给了我。

V1
1  4
2  4
3  4
4  4
5  4
6  4
7  4
8  4

我无法判断哪些观察与主题 4 相关,因为观察 1:8 是针对主题 2。

常用的方法我都试过了,比如

condition<- df == 4
df[condition]

如何对数据进行子集化,以便返回一个显示主题 4 的正确行号的数据集。

【问题讨论】:

  • 您的某一列没有标题
  • 试试which(df$V1 == 4)
  • subset(df, V1==4) ?
  • 您的 id 似乎是行名。如果您真的需要它们,将它们设为实际变量 df$id &lt;- rownames(df) 然后使用常规子集 df[df$V1 == 4,] 会更容易
  • 也可以加df[df$V1 == 4,,drop=F]

标签: r dataframe conditional-statements subset


【解决方案1】:

你也可以使用子集函数:

subset(df,df$V1==4)

【讨论】:

    【解决方案2】:

    自发布以来,我设法找到了解决方案。

    newdf <- subset(df, V1 == 4). 
    

    但是我仍然对这个问题的其他解决方案非常感兴趣,所以如果您知道另一种方法,请发布。

    【讨论】:

    • 您不应该使用R 对象作为用户创建对象的名称:您应该将您的data.frame 称为df 以外的其他名称。
    • @stasg,这非常在关于 SO 的 R 问题中很常见。
    • @docendodiscimus 是的,我知道 :(
    • @stasg 该论点在一般意义上是正确的,但不应与使用ctstr 作为名称进行比较。这些尤其成问题,因为它们是常用的。您最后一次使用df 是什么时候?你是对的,它不是最理想的,但它对于示例非常快速且有用。
    • 我同意。但我必须在这里坚持一个例外。它不仅在历史上用作默认名称,而且实际上效果很好。它被比作已成为常用语的俚语。例如,在空中飞行的带有翅膀的机器最初被称为“飞机”来描述正在进行的科学。很多人错误地称它为“飞机”,最终它卡住了。 :)
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 2016-10-28
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2011-03-27
    相关资源
    最近更新 更多