如何将几个整个数字划分为一列中的逗号分隔除以另一列中的数字

  • 本文关键字:数字 一列 分隔 几个 划分 r
  • 更新时间 :
  • 英文 :


我想在列中划分由逗号分隔的数字通过其他数字。这是我有

的输入
> 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%(

它们是整数(或整数(,被逗号隔开。

希望我清楚...谢谢...

相关内容

最新更新