R 在ggplot中绘制具有多个变量的线

R 在ggplot中绘制具有多个变量的线,r,ggplot2,line,R,Ggplot2,Line,我正在尝试使用R中的ggplot2基于2个变量绘制2条线。以下是我使用的完整Framingham数据集的一部分: df2 = read.table(text = " number smoker BMI sex 98 No 27.73 Men 99 No 24.35 Men 100 No 25.60 Men 101 Yes 24.33 Men 102 Yes 27.54 Men 299 No 24.62 Women 300

我正在尝试使用R中的ggplot2基于2个变量绘制2条线。以下是我使用的完整Framingham数据集的一部分:

df2 = read.table(text = " number smoker   BMI   sex
98      No 27.73   Men
99      No 24.35   Men
100     No 25.60   Men
101    Yes 24.33   Men
102    Yes 27.54   Men
299     No 24.62 Women
300     No 31.02 Women
301    Yes 21.68 Women
302    Yes 19.66 Women
303    Yes 26.64 Women", sep = "", header = TRUE)
我在ggplot中尝试了以下内容,得到了一个我并不想要的图形

ggplot(df2, aes(smoker, BMI, color=sex)) + geom_line() + geom_point()
我希望有两条线,一条是男人的,一条是女人的。我希望每个吸烟者类别中的点代表该性别组的平均值


你知道如何使用这个数据集吗?我在stackoverflow上找到了与其他数据集一起使用的示例。

我找到了一种方法,但如果有人能提供帮助,我仍在寻找一种更智能的方法

df3 <- with(df, tapply(BMI, list(smoker, sex), mean))
smoker <- c("No", "Yes", "No", "Yes")
sex <- c("Men", "Men", "Women", "Women")
BMI <- c(df3[1,1], df3[2,1], df3[1,2], df3[2,2])
df4 <- data.frame(smoker, sex, BMI)
ggplot(df4, aes(smoker, BMI, color=sex)) + geom_line(aes(group=sex)) + geom_point()

df3图表的图像对理解您试图做的事情有很大帮助。使用plyr软件包中的ddply和SUMMARE进行与tapply相同的计算,但返回ggplot可以直接使用的数据帧中的结果。鉴于两个示例中使用了不同的数据,下面的代码似乎在R中再现了您的图表:

 library(plyr)
 df3 <- ddply(df2,.(sex, smoker), summarize, BMI_mean=mean(BMI))
 ggplot(df3,aes(as.numeric(smoker), BMI_mean, color=sex)) + geom_line() + 
       scale_x_discrete("Current Sig Smoker Y/N", labels=levels(df3$smoker)) +
       labs(y="Mean Body Mass Index (kg/(M*M)", color="SEX")
库(plyr)

df3
facet\u grid
可能会有帮助。这太棒了!我发现ddply比使用tapply然后构建数据框架更直接。非常感谢你的帮助!