在R中乘以数字和符号

时间:2015-11-06 22:09:27

标签: r

我有两个具有相同尺寸的数据表 - 一个用数字填充,另一个用符号可以是正数或负数,例如

A = data.table(colOne = c(-1, 3, 4), 
           colTwo = c(1, 0, -1));

B = data.table(colOne = c("a","b","-c"), 
           colTwo = c("d","-e","f"));

并且需要将两个元素相乘:

resultMatrix = data.table(colOne = c("-a","3b","-4c"), 
                          colTwo = c("d","0","-f"))

"-e*0"也可以接受而不是结果的"0"中的colTwo,并且不确定如何在不经历循环的情况下执行此操作,这会花费大量时间来处理更大的表。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

这会让你接近:所有剩下的就是将减号移动到字符串的LHS:

mapply(paste, A, B, MoreArgs=list(sep='*') )
     colOne colTwo
[1,] "-1*a" "1*d" 
[2,] "3*b"  "0*-e"
[3,] "4*-c" "-1*f"

使用sub在第二部分的示例中最终确定了这项工作:

> res[] <- sapply(res , function(x) sub("(.*)([-])(.*)", "\\2\\1\\3", x) )
> res
     colOne colTwo
[1,] "-1*a" "1*d" 
[2,] "3*b"  "-0*e"
[3,] "-4*c" "-1*f"

在我写这篇文章之前,我查了几个我认为可能类似的问题:How to represent polynomials with numeric vectors in Rhttps://stackoverflow.com/questions/16862801/trouble-mapping-vectors-arrays-into-polynomials-that-return-vector,但他们似乎没有回答涉及多个变种名称的特定问题,虽然我特别推荐查看&amp; mpoly&#39; -package。

答案 1 :(得分:1)

这可能是使用zoom的机会。它的作用类似于gsubfn,除了您可以将函数应用于替换。此处的函数gsub会捕获所有数字和&#39; - &#39;在第一组中,第二组中的字符。然后强制使用数字,利用这一事实,即唯一失败的情况是尾随&#34; - &#34;。

f