-1

次のように、値のビンの後にカウントが続く形式でデータセットをテキストファイルに保存しています。

var_a 1:5 5:12 7:9 9:14 ...

var_aがデータセット内で15回、5 12回など、値を取得したことを示します。各変数は、その形式で独自の行にあります。

このデータセットに対して、分位数や分散などの計算をRで実行できるようにしたいと思います。ファイルからデータをロードしてこれらの統計を計算する簡単な方法はありますか?最終的には、変数ごとに箱ひげ図を作成したいと思います。

乾杯!

4

2 に答える 2

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

または箱ひげ図を取得します

boxplot(variables, ~.)

ここに画像の説明を入力してください

于 2012-07-31T03:38:06.297 に答える
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
于 2012-07-31T03:37:08.483 に答える