R 重复代码的效率-用于具有变量名称的循环
考虑R中的以下数据帧R 重复代码的效率-用于具有变量名称的循环,r,R,考虑R中的以下数据帧 df <- data.frame(ID = 1:7, Group = c(rep(1,2), rep(2, 3), rep(3,2)), Year = c(rep(2011, 4), rep(2012, 3)), X = rnorm(7)) df我认为您最好按照评论中所述使用split。但是,您可以使用assign通过循环实现所需的功能 for (i in 1:3) { assign(paste0("Group", i), df[df$Group==i,]) }
df <- data.frame(ID = 1:7, Group = c(rep(1,2), rep(2, 3), rep(3,2)), Year = c(rep(2011, 4), rep(2012, 3)), X = rnorm(7))
df我认为您最好按照评论中所述使用split
。但是,您可以使用assign
通过循环实现所需的功能
for (i in 1:3) {
assign(paste0("Group", i), df[df$Group==i,])
}
另外,在编制索引时要小心,需要用逗号表示“所有列” 我认为,如评论中所述,使用split
会更好。但是,您可以使用assign
通过循环实现所需的功能
for (i in 1:3) {
assign(paste0("Group", i), df[df$Group==i,])
}
另外,在编制索引时要小心,需要用逗号表示“所有列” 这里是@Rupert答案的一个变体,它自动从列中提取级别:
makeGroupVars <- function(baseName,df,column){
levs <- levels(as.factor(column))
for(lev in levs){
assign(paste0(baseName,lev),df[column == lev,],envir = .GlobalEnv)
}
NULL
}
makeGroupVars这里是@Rupert答案的一个变体,它自动从列中提取级别:
makeGroupVars <- function(baseName,df,column){
levs <- levels(as.factor(column))
for(lev in levs){
assign(paste0(baseName,lev),df[column == lev,],envir = .GlobalEnv)
}
NULL
}
makeGroupVars请参阅help(split)
以防帮助文档混淆split(df,df$Group)
。同样为了帮助处理重复的数字,组向量可以通过rep(1:3,c(2,3,2))
Thankyou Rich创建,也感谢Pierre的跟进-但是,我仍然相信系统变量命名是我正在寻找的解决方案的一个重要部分,但是我不熟悉split,我会考虑在将来使用它,谢谢。如果您首先定义groupksplit(df,paste0(“Group”,df$Group))
,您的循环就会工作。检查列表名称。如果帮助文档混淆了split(df,df$Group)
,请参阅help(split)
。同样为了帮助处理重复的数字,组向量可以通过rep(1:3,c(2,3,2))
Thankyou Rich创建,也感谢Pierre的跟进-但是,我仍然相信系统变量命名是我正在寻找的解决方案的一个重要部分,但是我不熟悉split,我会考虑在将来使用它,谢谢。如果您首先定义groupksplit(df,paste0(“Group”,df$Group))
,您的循环就会工作。检查名单上的名字。