在使用dplyr::mutate代码时,如何对一系列数字进行编码?

在使用dplyr::mutate代码时,如何对一系列数字进行编码?,r,dplyr,mutate,R,Dplyr,Mutate,我想问是否有人知道如何解决我的问题: ` master1<- master %>% mutate(underweight=BMI<18.5, normal=BMI%in%c(18.5,24.9), overweight=BMI%in%c(25,29.9), obese=BMI%in%c(30,34.9), extreme=BMI>35) ` `master1% 突变(体重不足=BMI35)`

我想问是否有人知道如何解决我的问题:

` master1<- master %>%
  mutate(underweight=BMI<18.5,
         normal=BMI%in%c(18.5,24.9),
         overweight=BMI%in%c(25,29.9),
         obese=BMI%in%c(30,34.9),
         extreme=BMI>35) `
`master1%
突变(体重不足=BMI35)`

我想创建一种新的列。。对于体重不足和极度肥胖,它起作用,但对于正常、超重和肥胖,我想我编码的数字范围是错误的…

百分比中的
%in%
将只检查精确值。由于这些是浮点数,因此也可能不匹配。这里,我们可能需要比较运算符(
&
)或在
之间使用

library(dplyr)
master1 <- master %>%
     mutate(underweight = BMI < 18.5,
        normal = between(BMI, 18.5, 24.9),
         overweight = between(BMI, 25, 29.9),
         obese = between(BMI, 30, 34.9),
         extreme = BMI > 35))
库(dplyr)
大师1%
突变(体重不足=体重指数<18.5,
正常=介于(BMI,18.5,24.9)之间,
超重=介于(BMI,25,29.9),
肥胖=介于(BMI,30,34.9)之间,
极限值=体重指数>35)

我创建了一个可复制的示例(reprex)来帮助解释,并使用了包{dplyr}:

library(dplyr)

# Create data frame for 34 subjects
# and add a column with random numbers for weight between 15 and 34
master1 <- data.frame(
  subjects = sample(1:34)
) %>% 
mutate(BMI = runif(34, min = 15, max = 34),
     BMI = round(BMI, digits = 1)) # rounds to 1 digit
库(dplyr)
#为34个主题创建数据框
#并添加一列,其中随机数的权重介于15和34之间
大师1%
突变(BMI=runif(34,最小值=15,最大值=34),
体重指数=四舍五入(体重指数,位数=1))#四舍五入为一位数
重新编码时,最好将其重新编码到一列,这称为长表单数据:

# Create a column called category with the labels for the weight groups

master1 <- master1 %>% 
     category = case_when(BMI <=  18.5 ~ "underweight",
                          BMI >= 18.5 & BMI <= 24.9 ~ "normal",
                          BMI >= 25 & BMI <= 29.9 ~ "overweight",
                          BMI >= 30 & BMI <= 34.9 ~ "obese",
                          BMI >= 35 ~ "extreme",
                          TRUE ~ NA_character_ # Just in case anything is # outside of these numbers this will return an NA which means nothing was entered
                          ))
#创建一个名为category的列,其中包含权重组的标签
大师1%
类别=情况(BMI=18.5&BMI=25&BMI=30&BMI=35~“极端”,
TRUE~NA_character_35;以防万一,这些数字之外的任何内容都将返回NA,这意味着未输入任何内容
))

请用
dput
显示一个小的可复制示例,预期输出
%in%
用于精确匹配。我猜你在找
dplyr::between()
请不要破坏你的帖子,为别人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下不可撤销的权利,以分发该内容(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅: