我尝试根据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
更复杂的方法。
答案 0 :(得分:1)
您可以使用nest()
。
library(tidyr)
df%>%
group_by(id)%>%
nest()
# A tibble: 3 x 2
id data
<fctr> <list>
1 a <tibble [3 x 1]>
2 b <tibble [3 x 1]>
3 c <tibble [3 x 1]>
每个tibble都包含您感兴趣的值。
df%>%
group_by(id)%>%
nest()%>%
.$data
[[1]]
# A tibble: 3 x 1
values
<int>
1 1
2 2
3 3
[[2]]
# A tibble: 3 x 1
values
<int>
1 1
2 2
3 3
[[3]]
# A tibble: 3 x 1
values
<int>
1 1
2 2
3 3
答案 1 :(得分:0)
我建议使用display:contents
函数拆分数据框(R中的函数可以完全按照您的意愿执行)。
例如:
split()
在此您要求按# Using OPs data
split(df, df$id)
列分割df
。此函数的输出是df的列表。
id
您可以使用以下命令获取所需名称:
$a
id values
1 a 1
2 a 2
3 a 3
$b
id values
4 b 1
5 b 2
6 b 3
$c
id values
7 c 1
8 c 2
9 c 3