r - 需要帮助根据列值对数据进行子集化
问题描述
让我先说我是 R 新手并且编码经验有限。我有一个包含 4 个不同变量的 data.frame,其中三个是因子(复制、稀释和小时数)。我的最后一个变量是我需要作为数值的光密度。
我希望根据小时数绘制不同稀释度的光密度差异(想想基于稀释度的正负值条形图)。对我来说真正的问题是我不知道如何根据小时来分离我的数据,所以我可以找到它们之间的密度差异。我觉得这是一项简单的任务,但我所看到的所有地方都让我走错了路。
Replicate pf_dilution hours OD
1 1 0 0 0.050
2 2 0 0 0.045
3 3 0 0 0.061
4 1 10 0 0.155
5 2 10 0 0.138
6 3 10 0 0.135
再往下看,小时数是 24 小时,之后是 48 小时。
解决方案
绘制数据集
df %>%
group_by(hours) %>%
ggplot(aes(x = pf_dilution, y = OD)) +
geom_col(aes(fill = hours), position = position_dodge()) +
labs(title = "Optical Density of C. elegans against P. fluorescens ",
x = "PF Concentration [uL]",
y = "OD") +
scale_x_continuous(breaks = seq(0, 100, 10)) +
scale_fill_discrete(name = "Hours")
数据
df <- read.table(text = "
Replicate pf_dilution hours OD
1 0 0 0.05
2 0 0 0.045
3 0 0 0.061
1 10 0 0.155
2 10 0 0.138
3 10 0 0.135
1 20 0 0.234
2 20 0 0.212
3 20 0 0.23
1 30 0 0.31
2 30 0 0.278
3 30 0 0.279
1 40 0 0.372
2 40 0 0.392
3 40 0 0.367
1 50 0 0.426
2 50 0 0.464
3 50 0 0.443
1 60 0 0.524
2 60 0 0.546
3 60 0 0.544
1 70 0 0.624
2 70 0 0.587
3 70 0 0.55
1 80 0 0.638
2 80 0 0.658
3 80 0 0.658
1 90 0 0.721
2 90 0 0.711
3 90 0 0.711
1 100 0 0.791
2 100 0 0.791
3 100 0 0.784
1 0 24 0.059
2 0 24 0.065
3 0 24 0.063
1 10 24 0.132
2 10 24 0.106
3 10 24 0.108
1 20 24 0.186
2 20 24 0.158
3 20 24 0.184
1 30 24 0.235
2 30 24 0.206
3 30 24 0.191
1 40 24 0.263
2 40 24 0.296
3 40 24 0.255
1 50 24 0.304
2 50 24 0.333
3 50 24 0.329
1 60 24 0.358
2 60 24 0.414
3 60 24 0.414
1 70 24 0.512
2 70 24 0.438
3 70 24 0.438
1 80 24 0.509
2 80 24 0.487
3 80 24 0.481
1 90 24 0.573
2 90 24 0.528
3 90 24 0.525
1 100 24 0.633
2 100 24 0.602
3 100 24 0.607
1 0 48 0.473
2 0 48 0.392
3 0 48 0.486
1 10 48 0.473
2 10 48 0.473
3 10 48 0.491
1 20 48 0.466
2 20 48 0.437
3 20 48 0.487
1 30 48 0.469
2 30 48 0.435
3 30 48 0.424
1 40 48 0.431
2 40 48 0.439
3 40 48 0.414
1 50 48 0.42
2 50 48 0.423
3 50 48 0.402
1 60 48 0.42
2 60 48 0.523
3 60 48 0.53
1 70 48 0.531
2 70 48 0.464
3 70 48 0.45
1 80 48 0.502
2 80 48 0.511
3 80 48 0.482
1 90 48 0.549
2 90 48 0.516
3 90 48 0.488
1 100 48 0.627
2 100 48 0.562
3 100 48 0.583
",
header = TRUE,
colClasses = c("factor", "integer", "factor", "double")
)