R:for循环用于子集化数据帧,始终保留第一列

时间:2015-02-20 21:56:01

标签: r

我有一个包含253列和100000 +行的数据框。

我想制作2列的子集,始终保留第一列,然后求和1以取右边的下一列。

第一循环:df [,c(1,2)]
第二循环:df [,c(1,3)]
....
最后一个循环:df [,c(1,253)]

我有这段代码:

for(i in 2:length(colnames(df))){
    paste("a",i,sep ="") <- df[,c(1,i)]
    i += 1
}

但是得到这个错误:

> for(i in 2:length(colnames(df))){
+     paste("a",i,sep ="") <- df[,c(1,i)]
+     i += 1
Error: unexpected '=' in:
"    paste("a",i,sep ="") <- df[,c(1,i)]
    i +="
> }
Error: unexpected '}' in "}"

注意: 我正在调用新的数据框a2,a3,......实际上,我想用相应列的名称命名它们。 例如,电视&lt; -df [,c(1,2)]而不是:a2&lt; -df [,c(1,2)]

**更新:

将i + = 1更改为i = i + 1后,我收到此错误:

Error in paste("a", i, sep = "") <- df[, c(1, i)] : 
  target of assignment expands to non-language object

**更新2:

基于我用过的评论:

for(i in 2:length(colnames(df))){
    name <- paste("a",i,sep ="")
    name <- df[,c(1,i)]
    i = i + 1
}

但只有一个数据框:

for(i in 2:length(colnames(df))){
    name <- paste("a",i,sep ="")
    assign(name) <- df[,c(1,i)]
    i = i + 1
}

但是得到了错误:

Error in assign(name) <- df[, c(1, i)] : 
  could not find function "assign<-"

1 个答案:

答案 0 :(得分:-1)

根据@eddi的答案,我得到了这个:

第一个回答:

for(i in 2:ncol(df)){
    assign(paste("a", i, sep=''), df[,c(1,i)])
}

但是,因为我希望列名作为每个新数据框的名称,所以我稍微更改了代码:

for(i in 2:ncol(df)){
    assign(paste(as.character(colnames(df[i])), i, sep=''), df[,c(1,i)])
}

谢谢@eddi ,.我不知道分配功能。