这是我的数据框的示例。我有三年,三个州和六个职位。我想对数据框进行子集设置,以便为所有六个角色的年和州的每个组合都创建一个新的数据框。
> A[1:10,c(1,4,64:69)]
Year State Role1 Role2 Role3 Role4 Role5 Role6
1 2010 1 1 0 1 1 0 0
2 2012 3 1 0 0 1 0 0
3 2010 2 1 0 0 1 0 0
4 2011 1 1 0 0 1 0 0
5 2011 3 0 1 0 1 0 0
6 2010 2 1 0 0 1 0 0
7 2010 2 0 1 0 1 0 0
8 2012 2 0 1 0 1 0 0
9 2012 2 0 0 0 0 0 1
10 2011 1 0 0 1 0 0 0
我可以做这样的事情,并重复所有组合:
2010_1_Role1 <- subset(A, Year=="2010" & State=="1" & Role1=="1")
2011_1_Role1 <- subset(A, Year=="2011" & State=="1" & Role1=="1")
2012_1_Role1 <- subset(A, Year=="2012" & State=="1" & Role1=="1")
...我没有很多编写循环的经验,但是我发现可能有一种更快的方法来编写for循环!有什么建议?谢谢!
我们可以使用split
给予list
的data.frame
各组的所有唯一组合
lst1 <- split(A, A[c("Year", "State", "Role1")], drop = TRUE)
然后在list
使用中进行所有转换lapply/sapply
不建议在全局环境中具有多个对象。如果需要的话
list2env(lst1, .GlobalEnv)
list
用首选对象名称更改的名称后。
目前尚不清楚为什么我们需要子集化。如果要在每个组上执行一些代码,则group_by
首选操作
library(dplyr)
A %>%
group_b(Year, State, Role1) %>%
mutate(Colname = yourfun(Colname))
# or for summarise
# summarise(n = n())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句