所以我有一个数据框,我将其称为R.看起来像这样:
zep SEX AGE BMI
1 O F 3.416667 16.00000
2 O F 3.833333 14.87937
3 O G 3.416667 14.80223
4 O F 4.000000 15.09656
5 N G 3.666667 16.50000
6 O G 4.000000 16.49102
7 N G 3.916667 16.02413
通过这个数据框,我想绘制多个直方图,比较不同方面,如性别影响BMI。像这样:
par(mfrow=c(1,3)
boxplot(DF$BMI ~ DF$ZEP)
boxplot(DF$BMI ~ DF$GENDER)
boxplot(DF$BMI ~ ~ DF$AGE)
但由于某种原因,列被制成字符而不是因素。
现在我提出这个问题,如果它们是角色,有没有办法绘制这些?如果没有,我该怎么办?
还有一种方法可能将zep和性别变成逻辑因子的向量吗?也许在zep如果O然后是真(1)如果不是那么假(0),和SEX相同的东西。如果G则为真(1)如果不是则为假(0)。
答案 0 :(得分:1)
我必须为我的高级数据分析类绘制分类变量。我可以帮你。 beed
代表边境入境和就业数据,不会窃取我的研究报告。
我用来创建因子的代码是例如:(我有一个名为portname的列,它是列中的虚拟变量,用于创建带有因子变量的列(名称)这就是我如何使您描述的逻辑我已经在下面用较大的代码块添加了代码。
beed$portdisc <- as.numeric(beed$portname)
beed$portdisc[beed$portdisc==0] <- "Columbus Port of Entry"
beed$portdisc[beed$portdisc==1] <- "Santa Teresa Port of Entry"
beed$portdisc[beed$portdisc==2] <- "New Mexico All Ports Aggregate"
所以我在这里完成的工作由数据框beed
完成,并使用包含我的portname
变量的特定列。我在我的数据框中添加了一个名为beed$portdisc
的新列,然后使用[ ]
我定义了要标记为什么的列。
在你的情况下,我认为这应该有效(想想,但我已经通过使用你提供的数据进行了测试)。
我很难用离散变量制作标签。我道歉但这让你非常接近。
library(ggplot2)
DF$SEX.factor <- as.character(DF$SEX)
DF$SEX.factor[DF$SEX.factor== "G"] <- "0"
DF$SEX.factor[DF$SEX.factor== "F"] <- "1"
DF$SEX.factor <- as.factor(DF$SEX.factor)
bar <- ggplot()
bar <- bar + geom_bar(data = DF$Sex.factor, aes(x=DF$SEX.factor),binwidth = .5)+ xlab("Sex")
bar <- bar + scale_x_discrete(limits = c(0,1,2), breaks= c(0,1,2), labels = c(" ","Male" ,"Female"))
bar
# DF.BMI5 = cut(DF$BMI,pretty(DF$BMI,5)) # Creates close to 5 integer ranges as factors, actomatically chooses pretty scales.
# This would be good to compair say age and BMI, best with one discreate and one continious variable
p <- ggplot(DF, aes(x = SEX.factor, y = BMI))
p <- p + geom_boxplot(width = 0.25, alpha = 0.4)
p <- p + geom_jitter(position = position_jitter(width = 0.1), alpha = .35, color = "blue")
# diamond at mean for each group
p <- p + stat_summary(fun.y = mean, geom = "point", shape = 18, size = 6,
colour = "red", alpha = 0.8)
p <- p + scale_x_discrete(limits = c(0,1,2), breaks= c(0,1,2), labels = c(" ","Male" ,"Female")) + xlab("Sex")
p
这是我在自己的数据上运行此代码时得到的内容。我认为这是您要创建的内容,我已经包含了上面的代码。它可以处理x是离散变量的任何东西,只需使用at.factor()并将y设置为连续类型。功能/
如果您需要更多帮助,请告诉我,我喜欢帮助这里的人,因为这有助于我磨练我的R技能。我是一个像Visual Studio这样的人,VBA是我的朋友。
希望这有帮助!
答案 1 :(得分:0)
如果您需要将某个字符更改为系数,则可以始终使用as.factor('A')
。