R中的数据组织:作为单个对象的不同长度的向量

时间:2013-07-01 14:56:21

标签: r dataframe

我正在尝试在同一图上绘制两个矢量的多个重叠密度图。据我所知,除非他们在同一个对象中,否则我无法这样做。

为了绘制数据,我需要有一个带有两列的data.frame();一个用于值,一个用于指定每个值属于哪个向量。

我的第一个矢量包含400个数据。第二个包含1200.我当前(有点不优雅)的解决方案包括将两个向量连接成一个新的data.frame向量,并将第二个向量添加到包含400'a和1200'b的data.frame,以指示哪个向量原始数据来自。这只能起作用,因为我知道每个原始矢量中有多少数据。

当然必须有更有效的方法来做到这一点?

假设我的原始数据来自dframe1$vectordframe2$vector。我正在寻找创建一个名为dframe3的新对象,其中包含$value$original_vector_number列。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您正试图解决您不需要解决的问题。您不需要将它们放在同一个对象中以绘制其密度。只需使用lines

x <- rnorm(400,0,1)
y <- rnorm(1200,2,2)
plot(density(x))
lines(density(y))

答案 1 :(得分:-1)

如果您不想手动执行此操作,请使用library(reshape)melt

library(reshape)
dframe <- data.frame(a = rnorm(400,1,1),b = rnorm(1200,1.2,2))
df.m <- melt(dframe)
library(ggplot2)
ggplot(df.m,aes(x = value,color = variable)) + geom_density()
  

请注意,这并不能真正提供正确答案,因为将数据框放在一起会扩展两者中较小的一个以适应行数。在ggplot中执行此操作和绘图的正确方法如下:

手工:

vecA <- data.frame(rnorm(400,1,1),'a')
vecB <- data.frame(rnorm(1200,1.2,2),'b')
names(vecA) <- c('value','name')
names(vecB) <- c('value','name')
dtf <- rbind(vecA,vecB)
library(ggplot2)
ggplot(dtf,aes(x=value,color=name))+geom_density()