1

R で少なくとも 6 つのループ ステップを実行したいと考えています。私のデータ セットは、1 つのフォルダーに格納された28 個のファイルです。各ファイルには 22 行 (21 個の個別のケースと列名用の 1 行) と次の列があります: Id、id、PC1、PC2….PC20。

私は次のことを意図しています:

  1. 各ファイルをデータ フレームとして R に読み込む
  2. 各データフレームの「Id」という名前の最初の列を削除します
  3. 各データ フレームを次のように配置します。

    • 最初の列は「id」であり、

    • 次の 10 列は、最初の 10 個の PC (PC1、PC2、…PC10) である必要があります。

  4. 「id」に従って各データフレームをソートします(データフレームは、個人とそれぞれのPCのスコアの順序が同じである必要があります)
  5. 可能なすべてのペアの組み合わせ (378 の組み合わせ) の中で、veganパッケージの抗議関数によってペアワイズ比較を実行します。
  6. 各ペアの比較結果を対称 (28*28) 行列に格納し、さらなる分析に使用します

現時点では、データのペアごとに手動で行うことができます (コードは以下にあります)。

## 1. step
  ## read files into R as a data frame
c_2d_hand_1a<-read.table("https://googledrive.com/host/0B90n5RdIvP6qbkNaUG1rTXN5OFE/PC scores, c_2d_hand-1a, Symmetric component.txt",header=T) 
c_2d_hand_1b<-read.table("https://googledrive.com/host/0B90n5RdIvP6qbkNaUG1rTXN5OFE/PC scores, c_2d_hand-1b, Symmetric component.txt",header=T) 

## 2. step
  ## delete first column named “Id” in the each data frame 
c_2d_hand_1a[,1]<-NULL
c_2d_hand_1b[,1]<-NULL

## 3. step
  ## arrange each data frame that have 21 rows and 11 columns (id,PC1,PC2..PC10)
c_2d_hand_1a<-c_2d_hand_1a[,1:11]
c_2d_hand_1b<-c_2d_hand_1b[,1:11]

## 4. step
  ## sort each data frame according to “id”
c_2d_hand_1a<-c_2d_hand_1a[order(c_2d_hand_1a$id),]
c_2d_hand_1b<-c_2d_hand_1b[order(c_2d_hand_1b$id),]

## 5. step
  ## perform pairwise comparison by protest function 
library(permute)
library(vegan)
c_2d_hand_1a_c_2d_hand_1b<-protest(c_2d_hand_1a[,2:ncol(c_2d_hand_1a)],c_2d_hand_1b[,2:ncol(c_2d_hand_1b)],permutations=10000) 
summary(c_2d_hand_1a_c_2d_hand_1b)[2] ## or c_2d_hand_1a_c_2d_hand_1b[3]

私は R でのデータ処理/操作の初心者なので、自己学習スキルは、各データ セットのコードを入力し、その時点で各ペアワイズ比較を実行して、それぞれのステップを手動で実行するのに適しています。これらの 6 つの手順を 378 回実行する必要があるため、手動で入力するのは大変で時間がかかります。

ファイルをリストとしてインポートしようとして、いくつかの操作を試みましたが、うまくいきませんでした。具体的には、list.files() を使用して、「プローブ」と呼ばれるリストを作成しました。たとえば、プローブ[2]を使用して特定のデータフレームを選択できました。また、probe[2][1] などで列「Id」を評価し、probe[2][1]<-NULL で削除することもできます。しかし、for ループを使用しようとすると、行き詰まりました。

4

1 に答える 1

0

このコードはテストされていませんが、運が良ければ動作するはずです。Protest() の結果の概要は、リストのマトリックスに格納されます。

# develop a way to easily reference all of the URLs
url.begin <- "https://googledrive.com/host/0B90n5RdIvP6qbkNaUG1rTXN5OFE/PC scores, "
url.middle <- c("c_2d_hand-1a", "c_2d_hand-1b")
url.end <- ", Symmetric component.txt"
L <- length(url.middle)

# read in all of the data and save it to a list of data frames
mybiglist <- lapply(url.middle, function(mid) read.table(paste0(url.begin, mid, url.end), header=TRUE))

# save columns 2 to 12 in each data frame and order by id
mybiglist11cols <- lapply(mybiglist, function(df) df[order(df$id), 2:12])

# get needed packages
library(permute)
library(vegan)

# create empty matrix of lists to store results
results <- matrix(vector("list", L*L), nrow=L, ncol=L)
# perform pairwise comparison by protest function 
for(i in 1:L) {
for(j in 1:L) {
    df1 <- mybiglist11cols[[i]]
    df2 <- mybiglist11cols[[j]]
    results[i, j] <- list(summary(protest(df1[, -1], df2[, -1], permutations=10000)))
    }}
于 2013-05-29T22:07:11.363 に答える