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
。
答案 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]