如何从R中的另一个字符串类型列中减去一个字符串类型列?
我有两个现有的列:A列和B列。我想从A列减去B列得到C列。尝试了许多代码,但都不起作用。最好在R完成。以前有人做过类似的事情吗如何从R中的另一个字符串类型列中减去一个字符串类型列?,r,string,R,String,我有两个现有的列:A列和B列。我想从A列减去B列得到C列。尝试了许多代码,但都不起作用。最好在R完成。以前有人做过类似的事情吗 |A | B | C | |rs17158930-G | rs17158930 | G | |snp-120820-?xrs65832-?;rs10405-A| snp-120
|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。
当我使用gwas1%mutaterow1=row_number生成row1列时,错误仍然存在
如何解决它?一种方法是 创建具有行号的列 在上拆分A列和B列;把它们排成不同的行 在“-”上拆分列 对于每一行,创建C列以仅包括A列和B列中匹配的值。 再次将A列和B列合并为一行。 资料
请与我们分享到目前为止您尝试了什么以及您遇到了什么问题。非常感谢您提供的详细信息。如果A列和B列中有多个,该怎么办?例如:A列中:SNP2-179127489-T;rs16935279-C;rs10405744-A,我需要关注的是最后一个-,所以我应该得到B列:SNP2-179127489;rs16935279;rs10405744,C列:T;C有什么解决办法吗?谢谢你试过上面的方法吗?它返回了什么?如果你拥有的数据失败了,你能更新你的帖子,以一种可复制的格式向我们提供这个解决方案失败的数据吗?是的,我试过了。这是我以前的数据。我更新了一个更复杂的数据帧,但仍然希望得到相同的结果。我无法解决代码中的错误。
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")