r - 如何从 R 中的另一个字符串类型列中减去一个字符串类型列?
问题描述
我有两个现有列:A 列和 B 列。我想从 A 列中减去 B 列以得到 C 列。尝试了很多代码,但都不起作用。最好在 R 中完成这项工作。以前有人做过这样的事情吗?
|A | B | C |
|rs17158930-G | rs17158930 | G |
|snp-120820-?xrs65832-?;rs10405-A| snp-120820xrs65832;rs10405 |?x?;A |
|rs11829119-C;rs17790731-A |rs11829119;rs17790731 | C;A |
我稍微更改了数据,数据变得更加复杂。仍然想获得 C 列。我尝试了以下代码,但出现了错误。
gwas1 %>%
mutate(row1 = row_number()) %>%
separate_rows(A, B, sep = ';') %>%
mutate(row2 = row_number()) %>%
separate_rows(A, B, sep = 'x') %>%
transform(b= sub("(.*)-.*", "\\1", A), C= sub(".*-", "", A))%>%
group_by(row2) %>%
summarise(across(c(A, B, b), paste0, collapse = 'x'),
C= paste0(C[b %in% B], collapse = 'x')) %>%
group_by(row1) %>%
summarise(across(c(A, B, b), paste0, collapse = ';'),
C= paste0(C[b %in% B], collapse= ';'))
错误:必须按在 中找到的变量分组.data
。
row1
未找到列。
当我使用 生成 row1 列时gwas1<-gwas1%>% mutate(row1=row_number())
,错误仍然存在。
如何解决?
解决方案
一种方法是
- 创建具有行号的列
- 拆分
A
和B
列;
以将它们放在不同的行中 - 拆分
A
列'-'
- 对于每一行,创建
C
列以仅包含与A
和B
列匹配的值。 - 再次合并并列成
A
一行B
。
library(dplyr)
library(tidyr)
df %>%
mutate(row = row_number()) %>%
separate_rows(A, B, sep = ';') %>%
separate(A, c('A', 'res'), sep = '-') %>%
group_by(row) %>%
summarise(across(c(A, B), paste0, collapse = ';'),
C = paste0(res[A %in% B], collapse = ';')) %>%
select(-row) -> result
result
# A B C
# <chr> <chr> <chr>
#1 rs17158930 rs17158930 G
#2 rs16935279;rs10405744 rs16935279;rs10405744 C;A
#3 rs11829119 rs11829119 C
#4 rs17066873 rs17066873 C
#5 rs17790731 rs17790731 A
数据
df <- structure(list(A = c("rs17158930-G", "rs16935279-C;rs10405744-A",
"rs11829119-C", "rs17066873-C", "rs17790731-A"), B = c("rs17158930",
"rs16935279;rs10405744", "rs11829119", "rs17066873", "rs17790731"
)), row.names = c(NA, -5L), class = "data.frame")
推荐阅读
- html - HTML/CSS:允许背景图像悬停和绝对定位文本
- flutter - 如何在 Flutter 中从流提供者那里获取价值
- python - 为什么列宽不使用 tkinter 中的“权重”填充框架?
- firebase - Flutter 将 num 与 Firebase 中的 dynamic 进行比较
- azure - LogAnalytics - 加入 VMProcess 和 Perf 表以查找资源消耗 PID?
- flutter - 如何从 Flutter 中的歌曲 Youtube URL 仅流式传输歌曲的音频?
- python - 如何比较两个不同csv(旧的和新的)中的两列并在旧csv中存在值时更新第三列与熊猫
- amazon-s3 - 为什么 LogDNA 仅将部分数据积压到 Amazon S3?
- amazon-web-services - Terraform ECS / Github Actions 似乎忽略了 ALB 健康检查
- android - 当我们将 Jetpack Navigation 与 FragmentContainerView 一起使用时,如何避免片段重新创建?