我想在列中划分由逗号分隔的数字通过其他数字。这是我有
的输入> df = data.frame(sample1.dp = c(" 555"," 651"," 641"," 717"(,sample1.ad = c(" 555"," 68,583"," 68,583"," 2,639"," 358,359"," 358,359",sample2.dp = c(" 1023"," 930"," 683"," 1179"(,sample2.ad = c(" 1023"," 0,930"," 683"," 683"," 585,594"((> DF sample1.dp sample1.ad sample2.dp sample2.ad1 555 555 1023 10232 651 68,583 930 0,9303 641 2,639 683 6834 717 358,359 1179 585,594
最后,我想添加两个新列(AD/dp(,将sample1.ad的值除以sample1.dp和sample2.AD2.AD2.DP,它们代表逗号每一侧的数字倒数,这样:
> end = data.frame(sample1.dp = c(" 555"," 651"," 641"," 717"(, Sample1.Ad = C(" 555"," 68,583"," 204,437"," 358,359"(, sample1.ad_dp = c(" 1.00"," 0.10,0.90"," 0.32,0.68"," 0.50,0.50"(, sample2.dp = c(" 1023"," 930"," 683"," 1179"(, sample2.ad = c(" 1023"," 0,930"," 683"," 585,594"(,(, sample2.ad_dp = c(" 1.00"," 0.00,1.00"," 1.00"," 0.49,0,51"((>结束 sample1.dp sample1.ad sample1.ad_dp sample2.dp sample2.ad sample2.ad_dp1 555 555 1.00 1023 1023 1.002 651 68,583 0.10,0.90 930 0,930 0.00,1.003 641 204,437 0.32,0.68 683 683 1.004 717 358,359 0.50,0.50 1179 585,594 0.49,0,51
这意味着:xx yy,zz yy/xx,zz/xx aa bb,cc bb/aa,cc/aa
如果我考虑表中的值为numeric,则该值不起作用,因为值通过逗号分隔...
您有任何想法吗?
事先感谢您的帮助
您需要做的第一件事是用.
替换,
并将其铸成数字。然后根据您所需的条件分开,即
df[] <- lapply(df, function(i)as.numeric(gsub(',', '.', i)))
do.call(cbind, lapply(split.default(df, gsub('\D+', '', names(df))), function(i) i[2] / i[1]))
# SAMPLE1.AD SAMPLE2.AD
#1 1.000000000 1.000000
#2 0.004066052 0.001000
#3 0.004117005 1.000000
#4 0.499803347 0.496687
如果您的数字中有逗号,则该列很可能被中毒并被铸成字符。您需要做的是将列转换为数字,然后分别将每个列分开。
library(tidyverse)
dat <- tribble(~"SAMPLE1.DP", ~"SAMPLE1.AD", ~"SAMPLE2.DP", ~"SAMPLE2.AD",
555, 555, 1023, 1023,
651, "2,647", 930, ",93",
641, "2,639", 683, 683,
717, "358,359", 1179, "585,594")
dat %>%
mutate_at(c(2,4), list(~str_replace(., ",", "."))) %>%
mutate_all(as.numeric) %>%
mutate(addp1 = SAMPLE1.AD / SAMPLE1.DP,
addp2 = SAMPLE2.AD / SAMPLE2.DP)
#> # A tibble: 4 x 6
#> SAMPLE1.DP SAMPLE1.AD SAMPLE2.DP SAMPLE2.AD addp1 addp2
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 555 555 1023 1023 1 1
#> 2 651 2.65 930 0.93 0.00407 0.001
#> 3 641 2.64 683 683 0.00412 1
#> 4 717 358. 1179 586. 0.500 0.497
由Reprex软件包(V0.2.1(在2019-05-20创建
谢谢大家,但我的问题不太清楚,很抱歉。
在我的输入示例中,我只有逗号分隔的整数。
例如,在我的示例的第3行中:2,647的意思是2和647,我想将两个数字除以651,以使其结果:2/651,647/651,因此它将为0.01和0.99(或1%和99%(
它们是整数(或整数(,被逗号隔开。
希望我清楚...谢谢...