我目前正在处理标头为细胞样品名称的遗传数据。从每种类型的细胞中收集了2个样品,需要将它们绘制在箱形图中。由于样品命名不一致,我使用了一个单独的.csv文件,用户在其中写入样品名称及其所属的组。我正在尝试使用group_by()
函数来访问示例数据,然后使用其他.csv文件中的分组信息。有什么方法可以完成我想做的事情?
Cell Sample Data CSV:
Sample A1 Sample A2 Sample B1 Sample B2
1 3 3 5
Grouping CSV
Samples Group
Sample A 1
Sample B 1
Sample C 2
Sample D 2
我目前的想法是做这样的事情
library(dplyr)
groupFile <- data %>% group_by(groupFile$Group)
但是那没有用,我一直坚持如何使数据与分组文件相对应。
注意:我以前没有包含示例数据和代码就上传了这个问题,该问题已关闭。我希望这足以说明问题。
答案 0 :(得分:0)
首先,我们通过包含不同组中的样本来改进示例单元样本数据:
celldata <- structure(list(`Sample A1` = 1L, `Sample A2` = 3L, `Sample B1` = 3L,
`Sample B2` = 5L, `Sample C1` = 6L, `Sample C2` = 7L),
class = "data.frame", row.names = c(NA, -1L))
以及您的组数据:
groupdata <- structure(list(Samples = c("Sample A", "Sample B", "Sample C", "Sample D"),
Group = c(1L, 1L, 2L, 2L)), class = "data.frame",
row.names = c(NA, -4L))
使用“长”格式的数据而不是宽数据,并且所有内容都在一个数据框中,生活会容易得多。
我们可以使用tidyr::gather
重塑单元格数据的形状,然后使用dplyr::mutate
获得不带数字后缀的Samples
,最后使用dplyr::left_join
将样本和组组合在一起:< / p>
library(dplyr)
library(tidyr)
celldata %>%
gather(Sample, Value) %>%
mutate(Samples = gsub("\\d+", "", Sample)) %>%
left_join(groupdata)
结果:
Sample Value Samples Group
1 Sample A1 1 Sample A 1
2 Sample A2 3 Sample A 1
3 Sample B1 3 Sample B 1
4 Sample B2 5 Sample B 1
5 Sample C1 6 Sample C 2
6 Sample C2 7 Sample C 2
现在您可以在Group
上分组了。根据下一步要执行的操作,您可能需要将Group
转换为因子。而且,如果您使用的是ggplot2
,则可能甚至不需要group_by
。
例如:
library(ggplot2)
celldata %>%
gather(Sample, Value) %>%
mutate(Samples = gsub("\\d+", "", Sample)) %>%
left_join(groupdata) %>%
mutate(Group = factor(Group)) %>%
ggplot(aes(Group, Value)) +
geom_boxplot() +
geom_jitter(aes(color = Samples)) +
theme_bw()