【发布时间】:2018-08-20 21:39:28
【问题描述】:
我有一个数据集/表(称为 behavioural),其中包含来自 24 个参与者的数据 - 这些数据的命名格式为:'s1' 到 's24'。 p>
表/数据集中的前 6 行:
head(behavioural)[c(1,17)]
subj recognition_order
1 s1 2
2 s1 6
3 s1 7
4 s1 8
5 s1 9
6 s1 10
我想为 每个 参与者创建一个子集,并按变量 recognition_order
我已经创建了一个循环来执行此操作:
behavioural <- read.table("*my file path*\behavioral.txt", header = TRUE)
subj_counter <- 1
for(i in 1:24) {
subject <- paste("s", subj_counter, sep = "")
subset_name <- paste(subject, "_subset", sep="")
[subset_name] <- behavioural[which(behavioural$subj == subject), ]
[subset_name] <- subset_name[order(subset_name$recognition_order),]
subj_counter = subj_counter + 1
print(subset_name)
print(subj_counter)
}
而且我很确定逻辑是可靠的,除了当我运行循环时,它确实不创建了 24 个子集。它只会创建 1 - s24_subset。
这两行代码中“
[subset_name] <- behavioural[which(behavioural$subj == subject), ]
[subset_name] <- subset_name[order(subset_name$recognition_order),]
因为[subset_name] 不起作用。
我希望 [subset_name] 是动态的 - 即每次循环运行时,它的值都会发生变化,并且每次都会创建一个新的子集/变量。
我在网上看到了有关 assign() 函数的内容,但我不太确定如何在我的循环中实现它?
提前谢谢你!
【问题讨论】:
-
不要这样做。将所有类似的结果收集到一个命名列表中。更像这样的东西:stackoverflow.com/questions/17499013/…。从长远来看,这对您来说会容易得多。
-
另外,在寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。确保定义了所有变量。
-
我建议使用
split函数将您的原始数据集拆分为包含 24 个子集的列表。使用列表(使用 lapply)比使用 24 个单独的数据框要容易得多。 -
弗利克先生 - 我上面发布的整个代码可以直接在其他人的计算机上运行,只要他们有“behavioural.txt”文件,但是我如何将文本文件放置/附加到这个问题?
-
@Dave2e - 你的意思是这样的吗?
my_split_list <- split(behavioural, behavioural$subj)'这会创建一个非常大的列表,但是我如何按每个主题的 'recognition_order' 对其进行排序?