如何在R中的For循环中创建动态变量名称

问题描述 投票:0回答:2

我有一个数据集/表(称为行为),包含来自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

在这两行代码中,“< - ”之前我需要做什么?

[subset_name] <- behavioural[which(behavioural$subj  == subject), ]
[subset_name] <- subset_name[order(subset_name$recognition_order),]

因为[subset_name]不起作用。

我希望[subset_name]是动态的 - 即每次循环运行时,它的值都会改变,并且每次都会创建一个新的子集/变量。

我在网上看过有关assign()函数的内容但是我不太确定如何将它实现到我的循环中?

先感谢您!

r loops syntax
2个回答
3
投票

如果你想在split的结果中订购项目,而不是仅使用lapply来传递所需的函数调用,一次在一个数据帧上进行排序(在订购后由lapply重新捆绑在一起:

my_split_list <- split(behavioural, behavioural$subj)
ord.list <- lapply( my_split_list, function(d){ 
                   d[ order(d[['recognition_order']]) , ] }

这是一种常见的范例,称为“分裂 - 应用 - 组合”:“分裂 - 应用 - 组合战略的数据分析”https://www.jstatsoft.org/article/view/v040i01/v40i01.pdf


0
投票

您可以使用eval()parse()完成此操作,如下所示:

eval(parse(text = paste(subset_name, "<- subset_name[order(subset_name$recognition_order),]", sep = '')))
© www.soinside.com 2019 - 2024. All rights reserved.