[英]Cut Function With Levels of Factor Variable in R
我有一个简单的数据框,有两个变量,RowID和Country:
RowID Country
1 USA
2 Spain
3 USA
4 USA
5 Spain
6 Spain
我可以使用cut函数为完整数据创建bin
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
您可以使用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个区),可以使用以下代码
break_count <- 2
df3 %>%
group_by(Country) %>%
mutate(Bin = cut(row_number(), break_count)) %>%
ungroup
上面使用了break_count
2,但可以更改。 只有mutate
线与解决方案的第一个变体不同。
我们可以使用ave
df$Bin <- with(df, ave(RowID, Country, FUN=seq_along))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.