我加载了一个包含两列随机数的文件
RandomNumbers <- read.csv("~/Documents/RandomNumbers.csv")
现在,我可以通过这样的方式制作其中一列数据的直方图:
x <- hist(Cell2, breaks=seq(0,20000, by=1000)
然而,我的最终目标是简单地获取直方图频率数据,我可以通过这样做获得
x$breaks
x$counts
并将每行计数的每个值添加到我的其他表列的计数列中。
我想基本上平均或将我从CSV文件中加载的两列数字生成的两个单独的直方图加在一起。
最终,我将有超过2列/直方图加在一起,从而创建更平滑的分布。
我怎样才能最容易在R中做到这一点?请记住,我对R很新,所以如果可能的话,我更喜欢基本的功能而不是更高级的功能。
答案 0 :(得分:1)
这应该这样做,只需将文件名,要创建直方图数据的文件中的列和直方图的中断放入。输出文件变量“break”仅包括bin的下限。
>x = pmin(exp(rnorm(20)), 20)
>y = pmin(exp(rnorm(20)), 20)
>write.csv(data.frame(x,y),"/Users/foo/temp/randcsv.csv", row.names=FALSE)
>sumhists = function(file, cols=1:2, brk){
> dat = read.csv(file, stringsAsFactors=FALSE)
> nbins = length(brk)-1
> nvars = length(cols)
> newdat = matrix(NA, nrow=nbins, ncol=nvars+1)
> newdat[,1] = brk[1:nbins]
> for (col in cols) {
> h=hist(dat[,col], plot=FALSE, breaks=brk)
> newdat[,col+1] = h$counts
> }
> outdat = data.frame(newdat)
> names(outdat) = c("breaks", names(dat)[cols])
> outdat$total = rowSums(outdat[,-1])
> return(outdat)
> }
>#add countsd
>sumhists("/Users/foo/temp/randcsv.csv", cols=1:2, brk=seq(0,20, by=1))
breaks x y total
1 0 12 13 25
2 1 3 7 10
3 2 2 0 2
4 3 2 0 2
5 4 0 0 0
6 5 0 0 0
7 6 1 0 1
8 7 0 0 0
9 8 0 0 0
10 9 0 0 0
11 10 0 0 0
12 11 0 0 0
13 12 0 0 0
14 13 0 0 0
15 14 0 0 0
16 15 0 0 0
17 16 0 0 0
18 17 0 0 0
19 18 0 0 0
20 19 0 0 0
答案 1 :(得分:0)
有几种简单的方法可以做到这一点。如果只有两列或三列,您可以手动添加内容。
dataA=rnorm(50)
dataB=rnorm(50)
A=hist(dataA,breaks=(seq(-6,6,by=1)))$counts
B=hist(dataB,breaks=(seq(-6,6,by=1)))$counts
avedata=mean(A+B)
avedata
如果有多个列,您可以使用for
和apply
类型函数。使用类似(未测试)的内容。
avedata=NULL
datamatrix=matrix(NA,length("breaks"),"number of cols")
for(i in 1:"number of cols"){datamatrix[,i]=hist(yourdata[,i],breaks= (seq(-6,6,by=1))$counts)}
for(i in 1:length("breaks")){avedata[i]=datamatrix[i,]}
avedata
答案 2 :(得分:0)
CRAN上的HistogramTools包具有许多用于将直方图添加到一起以及以其他方式操纵直方图的功能。要将2个或更多直方图汇总在一起,您只需使用AddHistograms
函数,如下所示:
hist.1 <- hist(c(1,2,3,4), plot=FALSE)
hist.2 <- hist(c(1,2,2,4), plot=FALSE)
hist.sum <- AddHistograms(hist.1, hist.2)
hist.3 <- hist(c(1,2,2,4), plot=FALSE)
hist.sum <- AddHistograms(hist.1, hist.2, hist.3)