我有一个数据集存储在一个文本文件中,其格式为值的值,后跟计数,如下所示:
var_a 1:5 5:12 7:9 9:14 ...
表示var_a在数据集中采用值1 5次,5次12次,等等。每个变量都以该格式在其自己的行上。
我希望能够在R中对此数据集执行计算,例如分位数,方差等。有没有一种简单的方法从文件加载数据并计算这些统计数据?最后,我想为每个变量制作一个盒子和胡须图。
干杯!
答案 0 :(得分:5)
您可以使用readLines
来读取数据文件
.x <- readLines(datafile)
我会创建一些虚拟数据,因为我没有文件。这应该等同于readLines
## dummy
.x <- c("var_a 1:5 5:12 7:9 9:14", 'var_b 1:5 2:12 3:9 4:14')
我按间距拆分以获得每个
#split by space
space_split <- strsplit(.x, ' ')
# get the variable names (first in each list)
variable_names <- lapply(space_split,'[[',1)
# get the variable contents (everything but the first element in each list)
variable_contents <- lapply(space_split,'[',-1)
# a function to do the appropriate replicates
do_rep <- function(x){rep.int(x[1],x[2])}
# recreate the variables
variables <- lapply(variable_contents, function(x){
.list <- strsplit(x, ':')
unlist(lapply(lapply(.list, as.numeric), do_rep))
})
names(variables) <- variable_names
您可以使用
获取每个变量的方差lapply(variables, var)
## $var_a
## [1] 6.848718
##
## $var_b
## [1] 1.138462
或获取boxplots
boxplot(variables, ~.)
答案 1 :(得分:3)
不知道您的数据所处的实际形式,我可能会使用类似readLines
的内容来将每一行作为向量,然后执行以下操作:
# Some sample data
temp = c("var_a 1:5 5:12 7:9 9:14",
"var_b 1:7 4:9 3:11 2:10",
"var_c 2:5 5:14 6:6 3:14")
# Extract the names
NAMES = gsub("[0-9: ]", "", temp)
# Extract the data
temp_1 = strsplit(temp, " |:")
temp_1 = lapply(temp_1, function(x) as.numeric(x[-1]))
# "Expand" the data
temp_1 = lapply(1:length(temp_1),
function(x) rep(temp_1[[x]][seq(1, length(temp_1[[x]]), by=2)],
temp_1[[x]][seq(2, length(temp_1[[x]]), by=2)]))
names(temp_1) = NAMES
temp_1
# $var_a
# [1] 1 1 1 1 1 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 9 9 9 9 9 9 9 9 9 9 9 9 9 9
#
# $var_b
# [1] 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2
#
# $var_c
# [1] 2 2 2 2 2 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 3 3 3 3 3 3 3 3 3 3 3 3 3 3