我的第一个数据集(MSdata1)看起来像这样
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition
301.14093 7646 100.00 -0.34 5.5 C16 H22 O4 Na
149.02331 4083458.5 23.60 -0.08 6.5 C8 H5 O3
279.15908 33256 18.64 -0.03 5.5 C16 H23 O4
我的第二个数据集(MSdata2)看起来像这样
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition
331.11233 4324 94.00 -0.33 6.5 C17 H26 O5 Na
149.02331 4083458.5 23.60 -0.08 6.5 C8 H5 O3
279.15908 42315 18.64 -0.03 5.5 C16 H23 O4
我试图根据" ID"减去$ Intensity列中的两个数据集。每行,即$ Composition列。 (MSdata2 $ Intensity减去MSdata1 $ Intensity)
我的尝试是
!(data33$Composition %in% data3$Composition)
但是这个和它的变化要么给我TRUE / FALSE输出,要么不幸的是它减去了所有东西,这不是我的最终目标。我发现了类似的问题,但它们要么不处理字符串 - 要么它们的两个数据集的大小和内容非常相似。我的两个数据集将包含许多不同的信息,这些信息在整个过程中都有相似之处 - 它是我想要减去的相似之处,以便更好地理解它们的差异。
是,
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition
301.14093 -7646 100.00 -0.34 5.5 C16 H22 O4 Na
149.02331 0 23.60 -0.08 6.5 C8 H5 O3
279.15908 9059 18.64 -0.03 5.5 C16 H23 O4
感谢您提供的任何帮助! :(
编辑 - 我更改了输出,以便在第一个数据集中找不到$ Composition字符串,导致输出结果为负(例如,0-100 = -100)
答案 0 :(得分:1)
我建议将dplyr::left_join
与by="Composition"
一起使用。根据{{1}}表示的预期输出,似乎他有兴趣从OP
中减去MSdata1
MSdata2
已编辑:已添加答案,以包含来自library(dplyr)
MSdata2 %>% left_join(select(MSdata1, Intensity, Composition), by="Composition") %>%
mutate(Intensity = ifelse(is.na(Intensity.y), Intensity.x, Intensity.x - Intensity.y)) %>%
select(-Intensity.y, -Intensity.x )
# m.z Relative Delta..ppm. RDB.equiv. Composition Intensity
# 1 331.1123 94.00 -0.33 6.5 C17 H26 O5 Na 4324
# 2 149.0233 23.60 -0.08 6.5 C8 H5 O3 0
# 3 279.1591 18.64 -0.03 5.5 C16 H23 O4 9059
的{{1}}中没有匹配行的行。这些行应该MSdata1
。一旦可以使用MSdata2
查找此类行,然后使用Intensity = -Intensity
合并所有行。
anti_join
编辑#2:如果需要bind_rows
的所有记录,那么可以尝试一次:
MSdata2 %>% left_join(select(MSdata1, Intensity, Composition), by="Composition") %>%
mutate(Intensity = ifelse(is.na(Intensity.y), Intensity.x, Intensity.x - Intensity.y)) %>%
select(-Intensity.y, -Intensity.x ) %>%
bind_rows(anti_join(MSdata1, MSdata2, by="Composition") %>% mutate(Intensity = -Intensity))
# m.z Relative Delta..ppm. RDB.equiv. Composition Intensity
# 1 331.1123 94.00 -0.33 6.5 C17 H26 O5 Na 4324
# 2 149.0233 23.60 -0.08 6.5 C8 H5 O3 0
# 3 279.1591 18.64 -0.03 5.5 C16 H23 O4 9059
# 4 301.1409 100.00 -0.34 5.5 C16 H22 O4 Na -7646
数据:强>
MSdata1
答案 1 :(得分:0)
MSdata1 = MSdata1 = data.frame(m.z = c(301.14093, 149.02331, 279.15908), Intensity = c(7647, 4083458.5, 33256), Composition = c("C16 H22 O4 Na", "C8 H5 O3", "C16 H23 O4"))
MSdata2 = data.frame(m.z = c(331.11233, 149.02331, 279.15908), Intensity = c(4324, 4083458, 42315), Composition = c("C17 H26 O5 Na", "C8 H5 O3", "C16 H23 O4"))
MSdata2 %>% merge(MSdata1, by="m.z", all.x = TRUE) %>% select(-Composition.y) %>% replace(., is.na(.), 0) %>% mutate(Intensity = Intensity.x - Intensity.y)