如何从R中加载的CSV文件中添加直方图频率数据

如何从R中加载的CSV文件中添加直方图频率数据,r,statistics,dataframe,histogram,R,Statistics,Dataframe,Histogram,我加载了一个包含两列随机数的文件 RandomNumbers <- read.csv("~/Documents/RandomNumbers.csv") 并将每行的每个值(仅计数)添加到另一个表列的计数列中 我想基本上平均或相加两个单独的直方图,它们是由我在CSV文件中加载的两列数字生成的 最终,我将有2个以上的列/直方图添加在一起,从而创建一个更平滑的分布 如何在R中最轻松地执行此操作?请记住,我对R非常陌生,所以如果可能的话,我更喜欢基本函数而不是更华丽的东西。这应该可以做到,只需输入

我加载了一个包含两列随机数的文件

RandomNumbers <- read.csv("~/Documents/RandomNumbers.csv")
并将每行的每个值(仅计数)添加到另一个表列的计数列中

我想基本上平均或相加两个单独的直方图,它们是由我在CSV文件中加载的两列数字生成的

最终,我将有2个以上的列/直方图添加在一起,从而创建一个更平滑的分布


如何在R中最轻松地执行此操作?请记住,我对R非常陌生,所以如果可能的话,我更喜欢基本函数而不是更华丽的东西。

这应该可以做到,只需输入文件名、要为其创建直方图数据的文件中的列以及直方图的分隔符。输出文件变量“breaks”仅包括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
有几种简单的方法可以做到这一点。如果只有两列或三列,则可以手动添加内容

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
CRAN上的软件包有许多函数,用于将直方图添加到一起,或者处理直方图。要将两个或多个直方图相加,您只需使用如下函数的
AddHistograms

x <- hist(Cell2, breaks=seq(0,20000, by=1000)
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)
hist.1这是什么意思:“并从我的另一个表列将每行的每个值都添加到counts列中”?我搞不懂你想得到什么没关系,我想我明白了。
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)