Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重复代码的效率-用于具有变量名称的循环_R - Fatal编程技术网

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,]) }

考虑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,])
}

另外,在编制索引时要小心,需要用逗号表示“所有列”

我认为,如评论中所述,使用
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,我会考虑在将来使用它,谢谢。如果您首先定义
groupk
split(df,paste0(“Group”,df$Group))
,您的循环就会工作。检查列表名称。如果帮助文档混淆了
split(df,df$Group)
,请参阅
help(split)
。同样为了帮助处理重复的数字,组向量可以通过
rep(1:3,c(2,3,2))
Thankyou Rich创建,也感谢Pierre的跟进-但是,我仍然相信系统变量命名是我正在寻找的解决方案的一个重要部分,但是我不熟悉split,我会考虑在将来使用它,谢谢。如果您首先定义
groupk
split(df,paste0(“Group”,df$Group))
,您的循环就会工作。检查名单上的名字。