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