【问题标题】:How to plot a subset of a data frame in R?如何在 R 中绘制数据框的子集?
【发布时间】:2011-11-28 09:04:15
【问题描述】:

在 R 中是否有一种简单的方法可以做到这一点:

plot(var1,var2, for all observations in the data frame where var3 < 155)

可以通过创建新数据newdata &lt;- data[which( data$var3 &lt; 155),] 来实现,但我必须重新定义所有变量newvar1 &lt;- newdata$var1 等。

【问题讨论】:

  • 你不需要which——事实上你不应该因为性能原因使用它。它将布尔索引转换为数字索引,但您可以同样很好地使用两者来对数据框进行子集化。

标签: r plot subset


【解决方案1】:

with(dfr[dfr$var3 &lt; 155,], plot(var1, var2)) 应该可以解决问题。

编辑关于多个条件:

with(dfr[(dfr$var3 < 155) & (dfr$var4 > 27),], plot(var1, var2))

【讨论】:

  • 感谢您的快速回复。我试过了,但它只是输出情节,就好像限制 var3
  • 好吧,我用这样创建的 data.frame 进行了尝试:dfr&lt;-data.frame(var1=rnorm(100), var2=rnorm(100), var3=rnorm(100, 160, 10)),它完美地工作。也许还有别的东西挡住了你的路?或者也许你所有的观察结果都有 var3
  • 成功了,谢谢。 (我的问题是我之前已经将 var1 和 var2 定义为完整向量)。另外,是否可能有多个条件,例如 var4 > 27 ?
  • with(subset(df,var3&lt;155 &amp; var4&gt;27), plot(var1,var2))
【解决方案2】:

最直接的选择:

plot(var1[var3<155],var2[var3<155])

由于代码冗余,它看起来不太好,但对于 fastndirty hacking 来说还可以。

【讨论】:

    【解决方案3】:

    这就是我会这样做的,以便进入 var4 限制:

    dfr<-data.frame(var1=rnorm(100), var2=rnorm(100), var3=rnorm(100, 160, 10), var4=rnorm(100, 27, 6))
    plot( subset( dfr, var3 < 155 & var4 > 27, select = c( var1, var2 ) ) )
    

    Rgds, 雷纳

    【讨论】:

    • 谢谢,它有效。是否可以以这种方式绘制变量的函数?例如log(var1) 或 var1/var2
    • @jamie314 - 不确定您到底想要实现什么,但我认为您必须先将子集分配给一个新变量dfr1 &lt;- subset( dfr, var3 &lt; 155 &amp; var4 &gt; 27, select = c( var1, var2 ) ),然后您可以执行plot( dfr1$var2, dfr1$var1 / dfr1$var2 )之类的操作
    【解决方案4】:

    这个块应该可以完成工作:

    plot(var2 ~ var1, data=subset(dataframe, var3 < 150))
    

    我最诚挚的问候。

    这是如何工作的:

    1. 首先,我们使用子集函数进行选择。可以使用其他可能性,例如子集(dataframe,var4 =="some" & var5 > 10)。 “&”运算符可用于选择所有“一些”超过 10 个。运算符“|”也可用于选择“一些”“超过 10 个”。
    2. 下一步是使用波浪号 (~) 运算符绘制子集的结果,该运算符仅暗示一个公式,在本例中为 var.response ~ var.independet。当然,这不是一个公式,但非常适合这种情况。

    【讨论】:

    • 这看起来是一个可行的解决方案,但是,您可以添加评论以说明其工作原理。我个人更喜欢使用[subset,因为它可以减少潜在的副作用。
    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多