用R中的因子变量级别切割函数

时间:2016-01-10 03:19:51

标签: r

我有一个简单的数据框,包含两个变量,RowID和Country:

RowID    Country
1         USA
2         Spain
3         USA
4         USA
5         Spain
6         Spain

我可以使用剪切功能使用

为完整数据创建容器
df$Bin<-cut(df$RowID,breaks=3)

产生:

RowID   Country    Bin
1         USA      1
2         Spain    1
3         USA      2
4         USA      2
5         Spain    3    
6         Spain    3

但是,是否可以在变量Country的每个级别中应用cut函数?
换句话说,最后是:

RowID   Country    Bin
1         USA      1
2         Spain    1
3         USA      2
4         USA      3
5         Spain    2    
6         Spain    3

2 个答案:

答案 0 :(得分:3)

您可以使用dplyr

执行以下操作
library(dplyr)
df %>%
  group_by(Country)          %>%
  mutate(Bin = row_number()) %>%
  ungroup

输出

##Source: local data frame [6 x 3]
##
##  RowID Country   Bin
##  (int)   (chr) (int)
##1     1     USA     1
##2     2   Spain     1
##3     3     USA     2
##4     4     USA     3
##5     5   Spain     2
##6     6   Spain     3

修改

对于评论中提出的问题,关于如何将每个国家分成多个分区(例如,如果一个国家有100行要分解为10个分箱),可以使用以下代码< / p>

break_count <- 2
df3 %>%
  group_by(Country)                            %>%
  mutate(Bin = cut(row_number(), break_count)) %>%
  ungroup

上面使用了break_count,但可以更改。只有mutate行与解决方案的第一个版本不同。

答案 1 :(得分:0)

我们可以使用ave

 df$Bin <- with(df, ave(RowID, Country, FUN=seq_along))