【问题标题】:Splitting a dataset into two datasets in R (for ggplot2 channeled through Shiny)将数据集拆分为 R 中的两个数据集(对于通过 Shiny 引导的 ggplot2)
【发布时间】:2013-07-18 00:06:53
【问题描述】:

我在这里看到了一些类似的问题,但没有一个和我的完全一样 - 或者如果它们相同,我不认识它,作为 R 编程的新手(我用很多其他语言编程过,但是不是R!)

我有一个来自 csv 文件的输入数据集,我使用 read.csv 进行转换。数据集可能有也可能没有,其中有两个组。我发现我可以按如下方式拆分组:

datalist <- split(mydata, mydata$group)

但是然后我返回的列表与 ggplot2 不兼容(我收到一个错误,它无法绘制列表变量 - 尽管列表变量,如果我将其打印到控制台,会显示拆分数据子集?)。好的。但是如果我这样做了

data = as.data.frame(datalist[1])

并将其提供给 ggplot2,as.data.frame 会破坏我的列名,因此我丢失了要绘制的变量的名称。啊!

理想情况下,我想要将 read.csv 读取的输入数据拆分为两个单独的变量(数据帧,我接受它吗?),ggplot2 可以将其识别为有效数据集。实际上,我想将它们作为直方图叠加在同一个图上。

必须有一个简单的方法来做到这一点,但我不明白吗?欢迎建议或指点。

【问题讨论】:

  • 你可以通过datalist[[index]]提取单个数据帧,注意双括号
  • 我尝试这样做时出错; (列表)对象不能被强制输入“双”——奇数。这是电话,p
  • 如果您想在同一个绘图上使用它们,那么您可能希望将它们保留为一个 data.frame。如果您向我们展示您的数据是什么样子(使用dput 最好发布数据)并描述您想要的情节,我们可以提供帮助。

标签: r ggplot2 shiny


【解决方案1】:

如果您只想要一个索引值,那么使用子集可能会更容易(至少对于交互式使用而言)。

  p <- qplot(value,     # assuming there is a column named "value"
             data = subset(mydata, group==mydata$group[1]), 
             colour = "cyan")

【讨论】:

    【解决方案2】:

    split(mydata, mydata$group) 的结果是data.frames 的list[[[ 表示法有所不同:[ 子集列表,其中 [[ 从列表中提取。所以datalist[1] 是一个长度为 1 的列表,仅包含第一个 data.framedatalist[[1]] 是位于第一位的data.frame。由于ggplot(和qplot)需要data.frame,因此您需要@Alex 在评论中提到的第二个(双括号)版本。我不知道您为什么会遇到看到的错误,并且如果没有完整的示例就无法对其进行诊断。使用不同的数据集 (mtcars),我看不到它。

    datalist <- split(mtcars, mtcars$am)
    
    ggplot(datalist[[1]], aes(x=wt, y=mpg)) + geom_point()
    

    qplot(wt, data=datalist[[1]], colour="cyan")
    

    (我猜你想要colour=I("cyan"),但这是一个不相关的问题。)

    子集/提取运算符的区别可以在这里看到:

    > str(datalist)
    List of 2
     $ 0:'data.frame':      19 obs. of  11 variables:
      ..$ mpg : num [1:19] 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 ...
      ..$ cyl : num [1:19] 6 8 6 8 4 4 6 6 8 8 ...
      ..$ disp: num [1:19] 258 360 225 360 147 ...
      ..$ hp  : num [1:19] 110 175 105 245 62 95 123 123 180 180 ...
      ..$ drat: num [1:19] 3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 ...
      ..$ wt  : num [1:19] 3.21 3.44 3.46 3.57 3.19 ...
      ..$ qsec: num [1:19] 19.4 17 20.2 15.8 20 ...
      ..$ vs  : num [1:19] 1 0 1 0 1 1 1 1 0 0 ...
      ..$ am  : num [1:19] 0 0 0 0 0 0 0 0 0 0 ...
      ..$ gear: num [1:19] 3 3 3 3 4 4 4 4 3 3 ...
      ..$ carb: num [1:19] 1 2 1 4 2 2 4 4 3 3 ...
     $ 1:'data.frame':      13 obs. of  11 variables:
      ..$ mpg : num [1:13] 21 21 22.8 32.4 30.4 33.9 27.3 26 30.4 15.8 ...
      ..$ cyl : num [1:13] 6 6 4 4 4 4 4 4 4 8 ...
      ..$ disp: num [1:13] 160 160 108 78.7 75.7 ...
      ..$ hp  : num [1:13] 110 110 93 66 52 65 66 91 113 264 ...
      ..$ drat: num [1:13] 3.9 3.9 3.85 4.08 4.93 4.22 4.08 4.43 3.77 4.22 ...
      ..$ wt  : num [1:13] 2.62 2.88 2.32 2.2 1.61 ...
      ..$ qsec: num [1:13] 16.5 17 18.6 19.5 18.5 ...
      ..$ vs  : num [1:13] 0 0 1 1 1 1 1 0 1 0 ...
      ..$ am  : num [1:13] 1 1 1 1 1 1 1 1 1 1 ...
      ..$ gear: num [1:13] 4 4 4 4 4 4 4 5 5 5 ...
      ..$ carb: num [1:13] 4 4 1 1 2 1 1 2 2 4 ...
    > str(datalist[1])
    List of 1
     $ 0:'data.frame':      19 obs. of  11 variables:
      ..$ mpg : num [1:19] 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 ...
      ..$ cyl : num [1:19] 6 8 6 8 4 4 6 6 8 8 ...
      ..$ disp: num [1:19] 258 360 225 360 147 ...
      ..$ hp  : num [1:19] 110 175 105 245 62 95 123 123 180 180 ...
      ..$ drat: num [1:19] 3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 ...
      ..$ wt  : num [1:19] 3.21 3.44 3.46 3.57 3.19 ...
      ..$ qsec: num [1:19] 19.4 17 20.2 15.8 20 ...
      ..$ vs  : num [1:19] 1 0 1 0 1 1 1 1 0 0 ...
      ..$ am  : num [1:19] 0 0 0 0 0 0 0 0 0 0 ...
      ..$ gear: num [1:19] 3 3 3 3 4 4 4 4 3 3 ...
      ..$ carb: num [1:19] 1 2 1 4 2 2 4 4 3 3 ...
    > str(datalist[[1]])
    'data.frame':   19 obs. of  11 variables:
     $ mpg : num  21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 ...
     $ cyl : num  6 8 6 8 4 4 6 6 8 8 ...
     $ disp: num  258 360 225 360 147 ...
     $ hp  : num  110 175 105 245 62 95 123 123 180 180 ...
     $ drat: num  3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 ...
     $ wt  : num  3.21 3.44 3.46 3.57 3.19 ...
     $ qsec: num  19.4 17 20.2 15.8 20 ...
     $ vs  : num  1 0 1 0 1 1 1 1 0 0 ...
     $ am  : num  0 0 0 0 0 0 0 0 0 0 ...
     $ gear: num  3 3 3 3 4 4 4 4 3 3 ...
     $ carb: num  1 2 1 4 2 2 4 4 3 3 ...
    

    【讨论】:

    • 感谢您的解释,Brian。我昨天得到的错误是另一个来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多