R 对于一个包含字符和数字的向量,如何计算两个独立的平均值?

R 对于一个包含字符和数字的向量,如何计算两个独立的平均值?,r,R,R.的新成员。。我创建了一个BMI变量并将其与性别变量粘贴在一起,这样我就可以看到哪个BMI标记为M(男性)或F(女性)。我如何分别找到M组和F组的平均值 我曾尝试使用substr和gsub函数来去除字符,但不确定这是解决方案,因为这样我就无法知道BMI值是否应计算为M或F 编辑: 我想分别计算M和F的平均值,以了解如何进行简单的子群分析。我一直在尝试独立学习R,这个特殊的BMI问题来自一个旧的问题集 编辑: 我明白为什么粘贴在这里不起作用了。我将粘贴函数处理为SAS中的proc格式 set.s

R.的新成员。。我创建了一个BMI变量并将其与性别变量粘贴在一起,这样我就可以看到哪个BMI标记为M(男性)或F(女性)。我如何分别找到M组和F组的平均值

我曾尝试使用substr和gsub函数来去除字符,但不确定这是解决方案,因为这样我就无法知道BMI值是否应计算为M或F

编辑:

我想分别计算M和F的平均值,以了解如何进行简单的子群分析。我一直在尝试独立学习R,这个特殊的BMI问题来自一个旧的问题集

编辑:

我明白为什么粘贴在这里不起作用了。我将
粘贴
函数处理为SAS中的
proc格式

set.seed(123)
sex <- sample(x = c("M", "F"), size = 100, replace = TRUE)
height.cm <- rnorm(n = 100, mean = ifelse(sex == "M", 175, 163), sd = 3)
weight.kg <- -110 + height.cm * 1.1 + rnorm(n = 100, sd = 7)
waist.in <- -20 + ifelse(sex == "M", 35, 33) + 0.5 * weight.kg + rnorm(n = 100, sd = 2.5)

bmi <- weight.kg / (height.cm / 100) ^ 2

bmi_sex <- paste(sex, bmi, sep = "")

set.seed(123)

性别您可以根据
bmi
sex
变量计算平均值

tapply(bmi, sex, mean)

#       F        M 
#25.81020 27.14678 
不需要使用
bmi\u sex
变量来计算,但如果这是我们获取输入的方式,我们可以使用一些正则表达式来分离性别和实际bmi值

tapply(as.numeric(sub(".(.*)", "\\1", bmi_sex)), sub("(.).*", "\\1", bmi_sex), mean)

#       F        M 
#25.81020 27.14678 

我们可以编写一个函数,一次获取一种性别的bmi值

get_bmi <- function(bmi, sex, select_sex) {
   mean(bmi[sex == select_sex], na.rm = TRUE)
}

非常感谢。有没有一种方法可以分别计算M和F的平均值,而不是将它们一起放在输出中?@user12310746你所说的分别是什么意思?如果您将其单独存储到变量
输出中,例如是否有一种方法可以在函数中指定我只需要女性的平均bmi?请不要将原子值粘贴在一起。使用一个数据帧,它实际上是一个长度相等的原子向量的
列表,这里是性别和bmi。这允许您对指示器和数字数据运行任何分析。我通过更好地执行
df创建了数据框。而且,这篇文章感觉像是一篇文章。你能问真正的x问题,而不要求帮助你提出的y解决方案吗?具体来说,为什么需要分别求M组和F组的平均值?您可以用一个对象轻松回答您的问题:
聚合(bmi~sex,mydataframe,FUN=mean)
。请用问题的更完整背景编辑问题。@Parfait已更新。谢谢你的帮助。
get_bmi(bmi, sex, "F")
#[1] 25.8102
get_bmi(bmi, sex, "M")
#[1] 27.14678