我非常喜欢R,目前正努力学习这门语言。我想要做的是创建一个具有三个级别的新变量(如果这是有道理的)。我试图在同一个新变量中显示增长< = 0%,< 1%和> = 1%(如果可能,请告诉我)。
到目前为止,我已经尝试过这个:
pincome$perctchng<- ifelse(pincome$perctchng<=0,ifelse(pincome$perctchng<1,
ifelse(pincome$perctchng>=1,"level 1","level 2","level 3")))
这是我尝试过的代码。我知道这是错的,但任何建议都是正确的方向受到欢迎。
谢谢!
答案 0 :(得分:4)
嵌套ifelse
语句几乎不是正确的答案。他们难以阅读和脆弱。您的目标是将连续值(perctchng
中的数值)转换为分类值(&#39;等级1&#39;等)。 R&#39; cut
函数非常适用于此:
pincome <- data.frame(perctchng = c(-2, -1, 0, 1, 2, 5))
perctchng
1 -2
2 -1
3 0
4 1
5 2
6 5
pincome$level <- cut(pincome$perctchng, c(-Inf, 0, 1, Inf), c('level 1', 'level 2', 'level 3'))
perctchng level
1 -2 level 1
2 -1 level 1
3 0 level 1
4 1 level 2
5 2 level 3
6 5 level 3
答案 1 :(得分:1)
你的解决方案几乎不错,你的语法不对:
library(dplyr)
pincome <- data.frame(perctchng = c(-2, -1, 0, 1, 2, 5))
pincome %>%
mutate(perctchng_level = ifelse(perctchng <= 0, "level 1",
ifelse(perctchng < 1, "level 2",
ifelse(perctchng >= 1, "level 3", NA))))
结果:
perctchng perctchng_level
1 -2 level 1
2 -1 level 1
3 0 level 1
4 1 level 3
5 2 level 3
6 5 level 3
答案 2 :(得分:0)
tidyverse解决方案:
pincome $ perctchng <-ifelse(pincome $ perctchng <= 0,ifelse(pincome $ perctchng <1, ifelse(pincome $ perctchng> = 1,“级别1”,“级别2”,“级别3”)))
library(tidyverse)
pincome <- pincome %>%
mutate(perctchng = case_when(perctchng <= 0 ~ "level 1",
perctchng < 1 ~ "level 2",
perctchng >= 1 ~ "level 3",
TRUE ~ NA_character_)