【发布时间】:2018-06-22 09:44:09
【问题描述】:
我正在尝试根据 id 列中的值拆分数据框。
我有什么:
ids<-as.data.frame(c("a","a","a","b","b","b","c","c","c"))
unique_id<-unique(ids)
values<-as.data.frame(rep(1:3,3))
df<-as.data.frame(cbind(ids,values))
colnames(df)<-c("id","values")
它看起来像:
> df
id values
a 1
a 2
a 3
b 1
b 2
b 3
c 1
c 2
c 3
我得到的代码和错误是:
> for(id in unique_id){
+ paste0("value_for_",id)<-split(df, id = df$id)
+ }
Error in deparse(...) :
unused argument (id = c(1, 1, 1, 2, 2, 2, 3, 3, 3))
我想要什么:
value_for_a
id value
a 1
a 2
a 3
value_for_b
id value
b 1
b 2
b 3
value_for_c
id value
c 1
c 2
c 3
我觉得这应该是相当简单的,但我刚刚没有想法。我不反对使用比for loop 更复杂的方法。
【问题讨论】:
-
使用
split;split(df, df$id) -
这与代码中的内容有什么不同吗?
-
在不尝试分配给
paste的情况下使用它,而不是在循环内(它已经矢量化)。group_list = split(df, df$id)就是您所需要的。列表的名称已经基于id列。 -
您不应该希望这些作为单独的数据帧,
list的数据帧更容易使用。您可以使用 for 循环或lapply进一步并行处理它们,或者仍然一次处理一个。有关更多讨论和提示,请参阅 How do I make a list of data frames?。 -
如果你真的想这样做,看看
list2env。
标签: r