2

ある治療を受けた10人の被験者の測定値を含むファイルと、別の治療を受けた別の10人の被験者の測定値を含むAファイルがあるとします。B一元配置分散分析を実行したいので、Rのanova/aov関数を使用しています。ただし、aov最初の列にカテゴリ(つまり、ここではAまたはB)が含まれ、2番目の列に対応するサンプルが含まれるデータフレームにデータが含まれていることを想定しています。2つのファイルを読み取って、データフレームを自動的に作成するにはどうすればよいですか?

4

2 に答える 2

1

私はこれをしなければならなかったので、私はここに解決策を提示しています。

# Define a new function: files is a vector of file names.
# The return value is a data frame where the x column contains the category
# (the file name) and the y column contains the corresponding samples.
read.files <- function(files) {
    l <- lapply(files, function (x) read.table(x)$V1)
    return(data.frame(
        x = factor(unlist(lapply(seq_along(l), function(i) sapply(c(1:length(l[[i]])), function(x) files[i])))),
        y = unlist(l)
    ))
}

f <- read.files(c("A", "B"))

anova(aov(y ~ x, f))

fの出力は次のようになります。

   x    y
1  A 10.0
2  A 10.1
3  A 11.1
4  A 12.9
5  A 10.7
6  A  9.6
7  A 10.4
8  A 10.8
9  A 10.1
10 A  9.3
11 B 20.5
12 B 21.1
13 B 25.2
14 B 13.2
15 B 13.3
16 B 17.4
17 B 18.9
18 B 20.2
19 B 23.8

これは任意の数のファイルに対して機能しますが、各ファイルは1つの列のみに制限されています。ファイルには異なる行数を含めることができます。

于 2012-09-25T12:16:03.617 に答える
1

同じ問題を解決するために最近書いたコードを次に示します。私の場合、データは、という名前のCSVファイルblahblah_series_trials.csvにあり、そこでblahblah実験タイプが決定されました。

filenames <- dir(".", "*.series_trials.csv")
types <- sub('.*?([a-zA_Z]*)_series_trials.*', '\\1', filenames)
data <- adply(data.frame(f=I(filenames), t=types), 1,
              with, cbind(read.csv(f), exp_type=t))

これにより、各ファイルが読み取られ、元のexp_typeファイルに基づいて列が追加され、すべてが1つのデータフレームにバインドされます。

于 2012-09-25T12:30:28.433 に答える