我有一个非常简单的文本文件,其中is_MI
是一个虚拟变量。
is_MI blood_pressure
0 123
0 222
0 111
1 333
1 123
但是,当我尝试通过直方图或箱线图绘制此代码时
ggplot(df_sbp) + geom_bar(mapping = aes(x = is_MI))
它没有两个小节,每个小节分别表示0和1,而是列出了每个单独的数据点,如。
我已经尝试了ggplot
的所有组合,但似乎无法解决。我也尝试过factor(is_MI)
。
这是评论所建议的dput(droplevels(df_sbp[1:20, ]))
的输出。
structure(
list(
is_MI = structure(
c(9L, 9L, 7L, 1L, 8L, 17L, 12L, 18L, 5L, 14L, 3L, 11L, 15L, 16L, 4L, 2L, 10L, 6L, 13L, 9L),
.Label = c("0 89","0 93", "0 95", "0 98", "0 100", "0 105", "0 109",
"0 114", "0 116", "0 126", "0 128", "0 129", "0 130",
"0 132", "0 136", "0 141", "0 146", "0 157"),
class = "factor"),
blood_pressure = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA)),
row.names = c(NA, 20L),
class = "data.frame")
答案 0 :(得分:0)
您的数据存在问题,代码中的某处是_MI和blood_pressure共同产生的。即取而代之的是两个分开的数字0
和116
,您在"0 116"
和is_MI
中有一个用空格分隔的字符串NA
和blood_pressure
。这就是您正在观察的效果,即。而不是2列,您会看到很多字符串已转换为因数。
请参见下面的代码,其中strplit
函数用于从字符串中提取数字。由于您的1
仅包含head
,因此我故意将几个0
包含到数据中。
df <- structure(
list(
is_MI = structure(
c(9L, 9L, 7L, 1L, 8L, 17L, 12L, 18L, 5L, 14L, 3L, 11L, 15L, 16L, 4L, 2L, 10L, 6L, 13L, 9L),
.Label = c("0 89","0 93", "0 95", "0 98", "0 100", "0 105", "0 109",
"0 114", "0 116", "0 126", "0 128", "0 129", "0 130",
"0 132", "0 136", "0 141", "0 146", "0 157"),
class = "factor"),
blood_pressure = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA)),
row.names = c(NA, 20L),
class = "data.frame")
x <- paste(df$is_MI, sep = " ", collapse = " ")
y <- na.omit(as.numeric(unlist(strsplit(x, " "))))
z <- data.frame(matrix(y, byrow = TRUE, ncol = 2))
names(z) <- c("is_MI", "blood_pressure")
z[1, 1] <- 1
z[14, 1] <- 1
ggplot(z) + geom_bar(mapping = aes(x = is_MI))