我有一个数据集/表格(称为行为),其中包含 24 参与者的数据 - 这些数据的格式为:'s1'到's24'。
表/数据集中的前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
。
在这两行代码中,“&lt; - ”之前我需要做什么?
[subset_name] <- behavioural[which(behavioural$subj == subject), ]
[subset_name] <- subset_name[order(subset_name$recognition_order),]
因为[subset_name]
无效。
我希望[subset_name]
是动态的 - 即每次循环运行时,其值都会改变,并且每次都会创建一个新的子集/变量。
我在网上看过有关assign()
函数的内容但是我不太确定如何将它实现到我的循环中?
提前谢谢!
答案 0 :(得分:3)
如果要在split
的结果中对项目进行排序,而不是仅使用lapply
来传递所需的函数调用,以便一次对单个数据帧进行排序(这些是在订购后由lapply
捆绑在一起:
my_split_list <- split(behavioural, behavioural$subj)
ord.list <- lapply( my_split_list, function(d){
d[ order(d[['recognition_order']]) , ] }
这是一种常见的范例叫做&#34; split-apply-combine&#34;:&#34;分裂 - 应用 - 组合战略的数据分析&#34; https://www.jstatsoft.org/article/view/v040i01/v40i01.pdf
答案 1 :(得分:0)
您可以使用eval()
和parse()
完成此操作,如下所示:
eval(parse(text = paste(subset_name, "<- subset_name[order(subset_name$recognition_order),]", sep = '')))
答案 2 :(得分:0)
for(i in 1:5) {
assign(paste0("test_",i),i)
}
test_list <- mget(ls(pattern = "test_"))`
希望您得到一个好的答案。有一个很好的方法来创建一个assign函数并在mget中绑定该模式。我已经为R和Python概述了有关动态生成变量的许多问题。附加到以下链接。 -Creating Variables Dynamically (R, Python)