R:根据连续变量从分类变量创建新的分类变量
R: create a new categorical variable from a categorical variable based on a continuous variable
我已经看过here,其中使用了cut
函数。但是,鉴于我的情况,我还没有想出一个聪明的解决方案。
首先是我目前拥有的一些示例数据:
df <- data.frame(
Category = LETTERS[1:20],
Nber_within_category = c(rep(1,8), rep(2,3), rep(6,2), rep(10,3), 30, 50, 77, 90)
)
我想在 Nber_within_category
列的基础上创建第三列,形成一个新类别。在这个例子中,我怎样才能使例如Category_new
这样在每个类别中,Nber_within_category
至少为 5,如果 Category
已经有 Nber_within_category >= 5
,则采用原始类别。
例如,它应该是这样的:
df <- data.frame(
Category = LETTERS[1:20],
Nber_within_category = c(rep(1,8), rep(2,3), rep(6,2), rep(10,3), 30, 50, 77, 90),
Category_new = c(rep('a',5), rep('b', 4), rep('c',2), LETTERS[12:20])
)
这有点乱七八糟,但它确实有效:
df %>%
mutate(tmp = floor((cumsum(Nber_within_category) - 1)/5)) %>%
mutate(new_category = ifelse(Nber_within_category >= 5,
Category,
letters[tmp+1]))
行 floor((cumsum(Nber_within_category) - 1)/5)
是一种使用大小为 5 的 bin 对 cumsum 进行分类的方法(-1 以包括总和恰好为 5 的行),我将其用作索引以获取Nber_within_category < 5
行的新类别
如果您 运行 :
可能更容易理解列 tmp
的定义
x <- 1:100
data.frame(x, y = floor((x- 1)/5))
我已经看过here,其中使用了cut
函数。但是,鉴于我的情况,我还没有想出一个聪明的解决方案。
首先是我目前拥有的一些示例数据:
df <- data.frame(
Category = LETTERS[1:20],
Nber_within_category = c(rep(1,8), rep(2,3), rep(6,2), rep(10,3), 30, 50, 77, 90)
)
我想在 Nber_within_category
列的基础上创建第三列,形成一个新类别。在这个例子中,我怎样才能使例如Category_new
这样在每个类别中,Nber_within_category
至少为 5,如果 Category
已经有 Nber_within_category >= 5
,则采用原始类别。
例如,它应该是这样的:
df <- data.frame(
Category = LETTERS[1:20],
Nber_within_category = c(rep(1,8), rep(2,3), rep(6,2), rep(10,3), 30, 50, 77, 90),
Category_new = c(rep('a',5), rep('b', 4), rep('c',2), LETTERS[12:20])
)
这有点乱七八糟,但它确实有效:
df %>%
mutate(tmp = floor((cumsum(Nber_within_category) - 1)/5)) %>%
mutate(new_category = ifelse(Nber_within_category >= 5,
Category,
letters[tmp+1]))
行 floor((cumsum(Nber_within_category) - 1)/5)
是一种使用大小为 5 的 bin 对 cumsum 进行分类的方法(-1 以包括总和恰好为 5 的行),我将其用作索引以获取Nber_within_category < 5
如果您 运行 :
可能更容易理解列tmp
的定义
x <- 1:100
data.frame(x, y = floor((x- 1)/5))