r - 根据另一列减去两个数据集中的列正在删除我的行
问题描述
所以我有一些代码可以查看两个数据帧,并为某些分子组合减去一个名为“强度”的列值。但是,例如,如果分子不在另一个数据框中,由于某种原因,它完全摆脱了该行,不太清楚为什么。
blankdata3 和 data3 是我要减去的两个数据框。所以我减去一个分子的强度,例如
(data3 - blankdata3) = 减去数据
我有下面的代码,根据它们是否具有相同的成分来减去强度。但是,如果 data3 有一个在空白数据 3 中找不到的组合,当我打印我的数据减去结果时,它将完全摆脱该行。我不确定它为什么要这样做,因为如果在空白数据 3 中找不到它,它不会只是减去零吗?
#data3 looks like this but with more rows
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
#blankdata3 looks like this but with more rows
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition
331.11233 4324 94.00 -0.33 6.5 C17 H26 O5 Na
149.02331 3056982.3 23.60 -0.08 6.5 C8 H5 O3
279.15908 20000 18.64 -0.03 5.5 C16 H23 O4
#This is the current code I have for subtraction
datasubtracted <- blankdata3 %>% left_join(select(data3, Intensity, Composition), by ="Composition") %>%
mutate(Intensity = ifelse (is.na(Intensity.y), -Intensity.x, Intensity.y - Intensity.x)) %>%
select(-Intensity.y, -Intensity.x ) %>%
bind_rows(anti_join(data3, blankdata3, by = "Composition") %>%
mutate( Intensity = -Intensity))
#I expect to see something like this
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition
301.14093 7646 100.00 -0.34 5.5 C16 H22 O4 Na
331.11233 -4324 94.00 -0.33 6.5 C17 H26 O5 Na
149.02331 1026476.2 23.60 -0.08 6.5 C8 H5 O3
279.15908 13256 18.64 -0.03 5.5 C16 H23 O4
运行您的代码时,它给了我这个
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
331.11233 -4324 94.00 -0.33 6.5 C17 H26 O5 Na
149.02331 -3056982.3 23.60 -0.08 6.5 C8 H5 O3
279.15908 -20000 18.64 -0.03 5.5 C16 H23 O4
看起来它使 data3 强度完好无损,而 blankdata3 强度变为负值。所以它只是结合了两个数据帧,但它没有根据相似的组合减去强度。
我的数据的精确副本如下所示
#data3
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition C H O N Na S
301.14093 7646 100.00 -0.34 5.5 C16 H22 O4 Na 16 22 4 0 1 0
149.02331 3056982.3 23.60 -0.08 6.5 C8 H5 O3 8 5 3 0 0 0
279.15908 33256 18.64 -0.03 5.5 C16 H23 O4 16 23 4 0 0 0
#blankdata3
m.z Intensity Relative Delta..ppm. RDB.equiv. Composition C H O N Na S
331.11233 4324 94.00 -0.33 6.5 C17 H26 O5 Na 17 26 5 0 1 0
149.02331 4083458.5 23.60 -0.08 6.5 C8 H5 O3 8 5 3 0 0 0
279.15908 13256 18.64 -0.03 5.5 C16 H23 O4 16 23 4 0 0 0
解决方案
由于您只对 Intensity 进行操作,因此我建议您做一些不同于多重连接、反连接的操作:
data3$index <- "y"
blankdata3$index <- "x"
bind_rows(blankdata3, data3) %>%
spread(key = index, value = Intensity, fill = 0) %>% # fill = 0 replaces NA values
mutate(Intensity = y-x) %>%
select(-y, -x)
推荐阅读
- python - 如何遍历多个子集,执行操作并将结果带到 python 中的原始数据帧?
- docker - 在 docker-compose 构建期间将数据加载到 redis
- sql - React 登录表单抛出错误“发送到客户端后无法设置标题”
- python - 需要通过 twilio 中的 whatsapp 位置保存经纬度发送
- sql - 在执行期间修改查询结果 - 删除额外的“/”
- javascript - 如何在每个调用react redux中附加数据
- c# - 如何使用 ASP.NET MVC 将数据从视图文本框传递到控制器
- java - 无法获取 JDBC 连接/事务未处于活动状态
- javascript - Javascript sum 动态 django rest 框架条目
- r - 如何根据其他变量标记/删除特定重复项