使用R创建一个循环以子集数据

七月

这是我的数据框的示例。我有三年,三个州和六个职位。我想对数据框进行子集设置,以便为所有六个角色的年和州的每个组合都创建一个新的数据框。

> 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给予listdata.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章