gpt4 book ai didi

r - 转换简单的ggplot2代码以使用data.table

转载 作者:行者123 更新时间:2023-12-04 03:58:51 26 4
gpt4 key购买 nike

我的旧代码如下所示:

library(ggplot2)
gp<-ggplot(NULL,aes(x=Income))
gp<-gp+geom_density(data=dat$Male,color="blue")
gp<-gp+geom_density(data=dat$Female,color="green")
gp<-gp+geom_density(data=dat$Alien,color="red")
plot(gp) #Works

现在,我开始使用出色的data.table库(而不是data.frame):
library(data.table)
cols<-c("blue","green","red")
gp<-ggplot(NULL,aes(x=Income))
dat[, list(gp+geom_density(data=.SD, color=cols[.GRP])), by=Gender]
#I even tried
dat[, list(gp<-gp+geom_density(data=.SD, color=cols[.GRP])), by=Gender]
plot(gp) #Error: No layers in plot

我不确定到底出什么问题,但是似乎我在J()中运行的代码未在外部范围中识别。

如何以惯用的data.table方式实现这一目标?

最佳答案

ggplot2应该以长格式data.frames的相同方式与长格式data.tables一起使用:

library(data.table)
set.seed(42)

dat <- rbind(data.table(gender="male",value=rnorm(1e4)),
data.table(gender="female",value=rnorm(1e4,2,1))
)

library(ggplot2)
p1 <- ggplot(dat,aes(x=value,color=gender)) + geom_density()
print(p1)

不要将宽格式的data.frames(或data.tables)提供给ggplot2。

如果您有很多组,绘图将非常慢,但是由于 ggplot2的内在魔力, data.table并不能真正帮助您(直到Hadley以某种方式实现它)。您可以尝试计算 ggplot2之外的密度,但这仅对您有帮助:
set.seed(42)
dat2 <- data.table(gender=as.factor(1:5000),value=rnorm(1e7))
plotdat <- dat2[,list(x_den=density(value)$x,y_den=density(value)$y),by=gender]
p2 <- ggplot(plotdat,aes(x=x_den,y=y_den,color=gender)) + geom_line()
print(p2) #this needs some CPU time

当然,如果您有很多小组,您可能会进行错误的绘图。

关于r - 转换简单的ggplot2代码以使用data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com