2015-11-26 35 views
0

我已经给了一个数据集&我已经将它转换为矩阵。我一直想知道如何根据列中矩阵的值创建一个barplot。我基本上必须比较两个变量,即他们在&他们的生存状态上运行的年份。他们的生存状态是基于2个值,1是他们生活超过5年,2是他们在5年内死亡。我想比较两个变量,这取决于它们是否在1965年之前在1965年&之前运行过。所以我总共寻找4个小节,其中1个是在1965年之前运行并存活下来的,另一个是它们在1965年之前开始运作并且死亡,另一个是他们在1965年之后开始手术并且幸存下来,另一个是他们在1965年之后手术并死亡。如果有人能帮助我,我将非常感激!我的代码如下:R:Barlotots&通过变量分离它们

data<-data.matrix(readingfile) 
Survival<-c(data[,4]) 
Year<-c(data[,2]) 
Comparison<-matrix(c(Year,Survival),ncol=2) 
barplot(Comparison) # I know it's this line of code I will have to add arguments in, in order to make it work. 

回答

0

我不知道我是否理解你的问题。所以我给你提供一个非常基本的解决方案,我将所有阶段分开,以便在某处有一些有用的东西;-)

让我知道它是怎么回事!

# Let's first create some fake data 
survival <- sample(1:2, 100, replace=T) 
year <- sample(1940:1990, 100, replace=T) 
comparison <- data.frame(year, survival) 

# We sum each category for each year 
sum.per.year <- rbind(tapply(comparison$survival, comparison$year, function(x) sum(x==1)), 
    tapply(comparison$survival, comparison$year, function(x) sum(x==2))) 
# We create a logical vector to check what years are in the period we target 
year.before.1965 <- sapply(colnames(sum.per.year), function(c) as.numeric(c)<1965) 
# Now we aggregate (sum) the results for before and after 1965 
sum.per.year <- t(data.matrix(sum.per.year)) 
res <- sapply(1:2,function(c) tapply(sum.per.year[,c],year.before.1965,sum)) 
colnames(res) <- c("Lived.over.5","Died.in.5") 
rownames(res) <- c("Before.1965","After.1965") 

# And finally we output 
barplot(res, beside=T, col=c("blue","red")) 
legend("topleft", rownames(res), pch=15, col=c("blue","red"), bty="o") 

# OR, depending on what how you want to present the results 
barplot(t(res), beside=T, col=c("blue","red")) 
legend("topleft", colnames(res), pch=15, col=c("blue","red"), bty="o") 
+0

这正是我所需要的,非常感谢你!不是我期望的结果,但是这对我有很大帮助!再一次感谢你! :) – LunaRanger