我查看了互联网以及本网站,但我没有找到解决方案,很抱歉,如果我的问题已经得到解答。 我有一个数据帧,其中几行具有相同的ID。比方说吧
ID Value1 Value2
P1 12 3
P1 15 4
P22 9 12
P22 15 14
P22 13 9
P30 10 12
是否可以为每个不同的ID编写一个脚本,该脚本将数据帧和绘图放在不同的页面Value1~Value2中?换句话说,我有3个图,其中value1绘制为P1,P22和P30的值2.
我尝试用循环编写一个脚本(但我真的是R的新手):
for (i in levels(dataset$ID)) {
plot(dataset[i,2], dataset[i,2])
}
但我收到错误:
Errore in plot.new() : figure margins too large
Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
答案 0 :(得分:4)
我会在这里使用by
,按ID对您的数据进行分组。注意另外我使用ID作为标题。如果你没有很多ID,也许是一个方面的方法,起诉更高级别的情节包,如@Roman所示,这里更好。
by (dataset,dataset$ID,function(i){
plot(i$Value1,i$Value1,main=unique(i$ID))
})
另请注意,这不会对您“Errore”(我猜错误的西班牙语)
Errore in plot.new() : figure margins too large
一般情况下,当我收到此错误时,使用RStudio,我会扩大我的绘图区域。否则,您可以在调用绘图循环之前使用类似的东西设置绘图边距:
par(mar=rep(2,4))
答案 1 :(得分:2)
我会这样做。
mydf <- data.frame(id = sample(1:4, 50, replace = TRUE), var1 = runif(50), var2 = rnorm(50))
library(ggplot2)
ggplot(mydf, aes(x = var1, y = var2)) +
theme_bw() +
geom_point() +
facet_wrap(~ id)
答案 2 :(得分:2)
我不清楚你在“不同的页面”中的意思。 PDF的页面?然后在评论中运行代码。
DF <- read.table(text="ID Value1 Value2
P1 12 3
P1 15 4
P22 9 12
P22 15 14
P22 13 9
P30 10 12",header=TRUE)
#pdf("myplots.pdf")
for (i in levels(DF$ID)) {
plot(Value1 ~ Value2,data=DF[DF$ID==i,])
}
#dev.off()