我想在 R 中执行至少六个循环步骤。我的数据集是存储在一个文件夹中的28个文件。每个文件有 22 行(21 个个案,一行用于列名)和列如下:Id、id、PC1、PC2….PC20。
我打算:
- 将每个文件作为数据框读入 R
- 删除每个数据框中名为“Id”的第一列
安排每个数据帧如下:
第一列应该是“id”和
接下来的十列应该是前十个 PC(PC1、PC2、...PC10)
- 根据“id”对每个数据框进行排序(数据框应具有相同的个人顺序及其各自PC的分数)
- 在所有可能的配对组合(378 种组合)中,通过 vegan 包中的抗议函数执行配对比较
- 将每对比较的结果存储在对称 (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 中数据处理/操作的新手,我的自学技能适合手动执行相应的步骤,为每个数据集键入代码并在当时执行每个成对比较。由于我需要执行这六个步骤 378 次,因此手动输入会非常费时费力。
我尝试将文件作为列表导入并尝试了几次操作,但都不成功。具体来说,我使用 list.files() 创建了一个名为“probe”的列表。我能够使用例如探针[2] 选择某些数据帧。我还可以通过例如probe[2][1] 评估列“Id”,并通过probe[2][1]<-NULL 将其删除。但是当我尝试使用 for 循环时,我被卡住了。