R中基于性别条件创建新变量求助:仅计算男性Betaplasma+Calories
问题分析与解决方法
你的mutate命令存在两个关键语法问题:
- 在dplyr函数中,无需用
data$引用列,直接写列名即可,dplyr会自动在当前数据框的上下文里查找对应列。 - 你把条件判断
data$Sex == 'Male'作为了mutate的独立参数,这不符合语法规则——条件逻辑需要整合到新列的赋值表达式中。
以下是两种正确的实现方式:
方法1:使用if_else(适配单条件场景)
# 先确保加载dplyr包 library(dplyr) data <- data %>% mutate(betaplasma_calories_males = if_else(Sex == 'Male', Betaplasma + Calories, NA_real_))
if_else的逻辑是:当Sex == 'Male'为真时,计算Betaplasma + Calories;否则赋值为NA_real_(你也可以替换成0或其他默认值,根据需求调整)。
方法2:使用case_when(适配多条件场景,单条件也适用)
data <- data %>% mutate(betaplasma_calories_males = case_when( Sex == 'Male' ~ Betaplasma + Calories, TRUE ~ NA_real_ # 匹配所有其他情况,赋值为NA ))
注意:如果数据框中Sex的取值存在大小写差异(比如male而非Male),可以用str_to_upper(Sex) == 'MALE'统一匹配规则,避免因大小写导致的匹配失败。
内容的提问来源于stack exchange,提问作者Anden120
相关产品推荐
相关产品推荐

