拆分df列并执行减法

时间:2018-04-11 18:23:06

标签: r

我有一个4列的df,第4列实际上是一个字符串,数字用“,”分隔。

chrom   peakStart      peakEnd  CpGPos
chr10   117952993    117953593  111,304,470,566,577
chr10   25219070      25219670  92,162,301,354,385,450,483
chr10   4333197    4333797  241,488,493,502,547,597
chr10   64090001      64090601  265,269,282,439,465,499,515,527,585,594
chr10   68541389      68541989  503,511,525
chr10   84836010      84836610  18,69,92,139,344,403,488

我想将第4列拆分为“,”然后从300中减去每个值,并填充新列中所有值的最小值。例如

chrom   peakStart      peakEnd  CpGPos minimumDis
chr10   117952993    117953593  111,304,470,566,577 -4

我无法正确拆分以获取可以运行某些操作的数字向量。任何指针都有帮助。

ST

1 个答案:

答案 0 :(得分:2)

尝试

df$new_col <- sapply(strsplit(df$col4, split = ","), function(x) 300 - min(as.numeric(x)))

如果您正在寻找最小的绝对距离,您可以相应地修改内容:

    df$new_col <- sapply(strsplit(df$col4, split = ","), function(x) min(abs(300 - as.numeric(x))))

或(保留标志)

df$new_col <- sapply(strsplit(df$col4, split = ","), function(x) {
  tmp <- 300 - as.numeric(x)
  sign(tmp[which.min(abs(tmp))]) * min(abs(tmp))
})

(更新以反映对Rui Barradas的sign的更正)