R 基于列中的值拆分数据帧-在id和x27的列表上循环;s
我正在尝试根据R 基于列中的值拆分数据帧-在id和x27的列表上循环;s,r,R,我正在尝试根据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") 我得到的代码和错误是: > for(id
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")
我得到的代码和错误是:
> 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))
我觉得这应该是相当简单的,但我还没有想法。我不反对使用比
for循环更复杂的方法,我建议使用split()
函数拆分数据帧(R中的函数正好可以做您想要的事情)
例如:
# Using OPs data
split(df, df$id)
这里您要求按列id
拆分df
。此函数的输出是df的列表
$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
您可以使用以下命令获取想要的名称:
myList <- split(df, df$id)
names(myList) <- paste0("value_for_", names(myList))
myList您可以使用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]>
library(tidyr)
df%>%
分组依据(id)%>%
nest()
#一个tibble:3x2
id数据
1A
2 b
3 c
每个tible都包含您感兴趣的值
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
df%>%
分组依据(id)%>%
嵌套()%>%
.$数据
[[1]]
#一个tibble:3x1
价值观
1 1
2 2
3 3
[[2]]
#一个tibble:3x1
价值观
1 1
2 2
3 3
[[3]]
#一个tibble:3x1
价值观
1 1
2 2
3 3
使用拆分
<代码>拆分(df,df$id)
这与代码中的内容有什么不同吗?使用它时不要尝试分配到粘贴
,也不要在循环中(它已经矢量化了)group\u list=split(df,df$id)
是您所需要的全部。列表的名称已经基于id
列。您不应该将它们作为单独的数据帧,数据帧的列表
更容易使用。您可以使用for循环或lappy
进一步并行处理它们,或者一次只处理一个。有关更多讨论和提示,请参阅。如果您确实想这样做,请查看list2env
。这很漂亮。我以后如何调用这些数据帧?我需要对它们进行其他处理,并将它们与其他数据帧组合。好吧,您可以使用id
列作为参考,这样您就可以通过使用与您感兴趣的data
对应的id
来参考您感兴趣的data.frames。“为什么不使用nest()呢?”因为split
做同样的事情,并且内置于base R中,所以它不需要任何外部依赖项<代码>拆分(df,df$id)
。啊,那么让我重新措辞一下。我并不是故意要问这个问题。我确实理解你的问题是修辞性的,但我认为这是一个好问题:为什么要使用library(tidyr);图书馆(dplyr);df%>%group\u by(id)%>%nest()
?,当拆分(df,df$id)
执行相同的操作时?我认为唯一合理的答案是“如果您已经在使用dplyr
,可能是purrr
,并且出于未来工作流的原因,您希望数据帧彼此嵌入,而不仅仅是一个简单的列表,下面介绍如何做到这一点。”
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]>
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