R 带有“value';列和`事件数';柱
我有一张桌子,看起来像R 带有“value';列和`事件数';柱,r,R,我有一张桌子,看起来像 value(0 < v< 1), # of events --------------- ----------- 0.1, 1000 0.5, 20000 0.7, 3000000 0.1, 400000000 0.5, 50000000000 0.9, 6000000000000 ...,
value(0 < v< 1), # of events
--------------- -----------
0.1, 1000
0.5, 20000
0.7, 3000000
0.1, 400000000
0.5, 50000000000
0.9, 6000000000000
..., ...
当我尝试将某些函数(例如plot()
)应用于此表时,R不标识具有相同值的行,而是单独处理它们。如果我们有下表,用这种表做统计的好方法是什么
value, # of events
0.1, 400001000
0.5, ...
作为第一步,下面介绍如何将第一个表转换为第二个表 构造数据:
dd <- setNames(as.data.frame(matrix(c(0.1,1000,
0.5,20000,
0.7,3000000,
0.1,400000000,
0.5,50000000000,
0.9,6000000000000),
ncol=2,byrow=TRUE)),
c("value","count"))
然后使用melt
将数据转换为(可能)更有用的格式:
library(reshape2)
(dd3 <- melt(dd2,varnames="value",value.name="count"))
## value count
## 1 0.1 4.000010e+08
## 2 0.5 5.000002e+10
## 3 0.7 3.000000e+06
## 4 0.9 6.000000e+12
library(重塑2)
(dd3您的问题有点不清楚,但我认为您只想通过每个唯一值对事件进行求和?如果是这样的话,这个问题和相关问题有很多答案。以下是一种方法:
#fake data
set.seed(1)
x <- data.frame(value = 1:3, events = sample(1:10, 9, TRUE))
#Option 1
aggregate(events ~ ., data = x, FUN = "sum")
value events
1 1 23
2 2 14
3 3 22
#Option 2
> tapply(x$events, x$value, FUN = "sum")
1 2 3
23 14 22
#Option 3
> library(plyr)
> ddply(x, "value", summarize, sum = sum(events))
value sum
1 1 23
2 2 14
3 3 22
#Option 4
> library(data.table)
> x <- data.table(x)
> x[, sum(events), by = value]
value V1
[1,] 1 23
[2,] 2 14
[3,] 3 22
#伪造数据
种子(1)
x tapply(x$events,x$value,FUN=“sum”)
1 2 3
23 14 22
#选择3
>图书馆(plyr)
>ddply(x,“值”,总结,总结=总结(事件))
价值总和
1 1 23
2 2 14
3 3 22
#选择4
>库(数据表)
>x x[,总和(事件),由=值]
值V1
[1,] 1 23
[2,] 2 14
[3,] 3 22
随着数据的增长,这些解决方案(和其他解决方案)的规模也会有所不同。如果您想要加权平均值,我给出了一个比较时间和方法的相当全面的答案:
weighted.mean(dd$value, dd$count)
[1] 0.8966414
加权中值:(Hmisc中还有其他几个“加权”函数)
要打印,只需使用barplot
barplot(dd$count) #perhaps with log="y"
barplot(dd$count, log="y")
抱歉说得太模糊了。我想知道如何在这个表中应用基本函数,如均值或中位数,以了解如何处理R中的数据。正如您已经注意到的,我对R是新手,但我必须尽快了解这一点:-)使用各种选项的答案-这真的很有帮助。谢谢!
weighted.mean(dd$value, dd$count)
[1] 0.8966414
library(Hmisc)
wtd.quantile(dd$value, dd$count, .5)
#50%
#0.9
barplot(dd$count) #perhaps with log="y"
barplot(dd$count, log="y")