如何按列中的值创建“组”列

时间:2015-10-06 20:20:31

标签: r

 df <- data.frame(a = c("1", "1", "2", "3", "3", "4", "4", "5"),b = c(1:8))

我正在尝试创建一个组列df$c,以便将变量“1”,“2”和“3”以及df$a中的变量“4”和“5”组合在一起。

即。

  a b         c
"1" 1 "group a"
"1" 2 "group a"
"2" 3 "group a"
"3" 4 "group a"
"3" 5 "group a"
"4" 6 "group b"
"4" 7 "group b"
"5" 8 "group b"

我无法使用cut(),因为这似乎需要2&lt;组。

我尝试将列a转换为数字类并使用ifelse()

df$a <- df$a %>% as.character %>% as.numeric
ifelse(df$a < 4, df$c == "group a", df$c == "group b"

但是这会将每个变量强制转换为NA

2 个答案:

答案 0 :(得分:3)

如果您想使用cut,可以指定休息符的外边缘。这对于ifelse语句是有利的,因为它更具可伸缩性。如果你有更多拥有许多分数的小组,你就不必写出所有的条件:

df$c <- cut(as.numeric(df$a), c(1,3,5), c("group a", "group b"), include.lowest=TRUE)
#   a b       c
# 1 1 1 group a
# 2 1 2 group a
# 3 2 3 group a
# 4 3 4 group a
# 5 3 5 group a
# 6 4 6 group b
# 7 4 7 group b
# 8 5 8 group b

答案 1 :(得分:2)

我们只需要一个逻辑陈述,即test,&#39;是&#39;并且没有&#39;值是&#39;组a&#39;和&#39;组b&#39;分别

df$c <- ifelse(as.numeric(df$a) < 4, 'group a', 'group b')

但是,这可以在没有ifelse的情况下完成

df$c <-  c('group b', 'group a')[(as.numeric(df$a) < 4)+1L]