我刚刚开始使用R并且已经阅读了多本书籍和来源,而且它们变得越来越复杂但我仍然无法找到我认为应该是一个基本过程的解决方案。
我有3列的数据如下所示:(我真的在简化所有内容以尝试并获得一个非常明确的答案,可以应用于多种情况)
min max value
1 5 23
8 15 9
33 35 30
我想在图表上绘制这些数据。 根据这些数据,我打算在x轴上的每个1到5之间的值在y轴上等于23。
我尝试过几种方法,包括分别将每列分配给向量a,b和c。 使用以下内容生成正确数量的值:
y <- rep( c, (a-b+1))
按预期工作
然后在获取适当的x值时出现问题,我试过:
x <- (a:b)
但由于R函数的方式,它只适用于第一个变量。 现在我可以通过手动输入所有内容来完成这项工作:
x <- c(1:5, 8:15, 33:35)
但我真的需要一种自动化的方法,因为我正在处理这种结构的大数据集。
我看到其他一些人似乎也有类似的问题,但是基本原则似乎总是被大量的数据集和问题中的整个代码所困扰,所以我无法找到解决这个问题的好方法。 如果有经验的人能够解决这个问题,我将非常感激!
答案 0 :(得分:2)
dat <- read.table(text=
"min max value
1 5 23
8 15 9
33 35 30",
header=TRUE)
我仍然不太清楚你的意思,但也许:
newdat <- with(dat,data.frame(x=c(min,max),y=rep(value,2)))
newdat <- plyr::arrange(newdat,x)
plot(y~x,type="s",data=newdat)
目前尚不清楚5到8,15和33之间你想要做什么...另一种可能性是将每个位作为一个单独的段进行绘制:
plot(max~value,data=dat,xlim=range(c(dat$min,dat$max)),
type="n")
apply(dat,1,function(x) segments(x[1],x[3],x[2],x[3]))
答案 1 :(得分:1)
这个怎么样:
# your data.frame
df<-data.frame(min=c(1,8,33),max=c(5,15,35),value=c(23,9,30))
x<-unlist(apply(df,1,function(x)x[1]:x[2]))
y<-unlist(apply(df,1,function(x)rep(x[3],x[2]-x[1]+1)))
plotdata<-data.frame(x=x,y=y)
plotdata
x y
1 1 23
2 2 23
3 3 23
4 4 23
5 5 23
6 8 9
7 9 9
8 10 9
9 11 9
10 12 9
11 13 9
12 14 9
13 15 9
14 33 30
15 34 30
16 35 30
答案 2 :(得分:0)
这样的东西?
a <- c(c(1:5), c(8:15), c(33:35))
b <- c(rep(23,5), rep(9,8), rep(30,3))
plot(a,b, type="l")