我对R工具很新,我的问题可能有点太明显。R计算平均值,中位数,来自频率分布文件的方差
我有一个具有以下数据的文件:
Score Frequency
100 10
200 30
300 40
我如何读取这个文件,并计算平均值,中位数,方差和标准差?
如果上面的表格只是原始分数没有任何频率的信息,那么我可以这样做:
X < - 扫描(文件= “scores.txt”,什么=整数())
中位数(x)
等等,但我无法理解如何在给定频率表时进行这些计算。
我对R工具很新,我的问题可能有点太明显。R计算平均值,中位数,来自频率分布文件的方差
我有一个具有以下数据的文件:
Score Frequency
100 10
200 30
300 40
我如何读取这个文件,并计算平均值,中位数,方差和标准差?
如果上面的表格只是原始分数没有任何频率的信息,那么我可以这样做:
X < - 扫描(文件= “scores.txt”,什么=整数())
中位数(x)
等等,但我无法理解如何在给定频率表时进行这些计算。
lines <- readLines("scores.txt")[-1]
mat <- matrix(as.numeric(unlist(
strsplit(gsub(".*(\\d+).*(\\d+).*", "\\1,\\2", lines), ","))),
ncol = 2, byrow = TRUE)
print(summary(mat[, 1]))
print(summary(mat[, 2]))
根据您输入文件的格式,您可以使用read.csv("scores.txt")
。您可以用read.csv("scores.txt", sep="\t")
更改分隔符。如果您的数据没有标题,则可以使用选项header=F
。
我打算使用,
,因为这里比较容易阅读。
输入文件
Score,Frequency
100,10
200,30
300,40
R源之中代码
x <- read.csv("scores.txt")
mean(x$Score)
median(x$Score)
var(x$Score)
mean(x$Score)
sd(x$Score)
R输出
> mean(x$Score)
[1] 200
> median(x$Score)
[1] 200
> var(x$Score)
[1] 10000
> mean(x$Score)
[1] 200
> sd(x$Score)
[1] 100
如果您要包括的频率。
R源之中代码
x <- read.csv("scores.txt")
mean(rep(x$Score, x$Frequency))
median(rep(x$Score, x$Frequency))
var(rep(x$Score, x$Frequency))
mean(rep(x$Score, x$Frequency))
sd(rep(x$Score, x$Frequency))
R输出
> mean(rep(x$Score, x$Frequency))
[1] 237.5
> x <- read.csv("scores.txt")
> mean(rep(x$Score, x$Frequency))
[1] 237.5
> median(rep(x$Score, x$Frequency))
[1] 250
> var(rep(x$Score, x$Frequency))
[1] 4905.063
> mean(rep(x$Score, x$Frequency))
[1] 237.5
> sd(rep(x$Score, x$Frequency))
[1] 70.03616
读取数据与read.table
(读?read.table
用于从文件中读取)。然后,通过创建单个分数的矢量来扩展数据。然后我们可以编写一个函数来获得所需的统计信息。当然,如果你不想编写函数,你可以单独计算每个函数。
d <- read.table(header = TRUE, text = "Score Frequency
100 10
200 30
300 40")
d2 <- rep(d$Score, d$Frequency) ## expands the data by frequency of score
multi.fun <- function(x) {
c(mean = mean(x), median = median(x), var = var(x), sd = sd(x))
}
multi.fun(d2)
# mean median var sd
# 237.50000 250.00000 4905.06329 70.03616