0

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

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

datalist <- split(mydata, mydata$group)

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

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

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

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

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

4

2 回答 2

2

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

  p <- qplot(value,     # assuming there is a column named "value"
             data = subset(mydata, group==mydata$group[1]), 
             colour = "cyan")
于 2013-07-18T21:28:09.527 回答
1

的结果split(mydata, mydata$group)是slist的一个data.frame[[[符号有区别:[从列表中[[提取的列表的子集。datalist[1]长度为 1 的列表也是如此,仅包含第一个data.frame. datalist[[1]]data.frame排在第一位的那个。由于ggplot(and qplot) 需要 a 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 ...
于 2013-07-18T22:55:42.827 回答