来自具有变量输入

时间:2017-06-02 18:47:28

标签: r

我有一个包含两组数字的字符串变量的数据框。我需要将一个数字乘以下一个数字,并将结果分配给另一个字段。这对于正则表达式来说很简单,但问题是某些观察包含需要计算的多个输入,并且我很难概念化如何迭代这些字符串,直到没有额外的对来进行乘法。然后,一旦所有对都成倍增加,就必须将它们相加并分配给新变量。

这是我的原始数据

V1 <- c("ABC01-3XYZ=2, ABC04-5XYZ=3, ABC06-7XYZ=1",
         "ABC04-5XYZ=2", "ABC01-3XYZ=1, ABC04-5XYZ=1")
df <- data.frame(V1)

                                    V1
1 ABC01-3XYZ=2, ABC04-5XYZ=3, ABC06-7XYZ=1
2                             ABC04-5XYZ=2
3               ABC01-3XYZ=1, ABC04-5XYZ=1

我想在紧跟在“=”之后的整数后面紧跟“ - ”之后的整数,然后将它们相加,以便最终结果如下所示:

                                        V1 V2
1 ABC01-3XYZ=2, ABC04-5XYZ=3, ABC06-7XYZ=1 28
2                             ABC04-5XYZ=2 10
3               ABC01-3XYZ=1, ABC04-5XYZ=1  8

有关如何迭代每个逗号的任何建议都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用str_match_all包中的stringr,然后使用sapply访问所需的部分:

library(stringr)
l = lapply(df$V1,function(x) str_match_all(x,c("-(\\d+)","=(\\d+)")))
df$V2 = sapply(l,function(x) sum(as.numeric(x[[2]][,2])*as.numeric(x[[1]][,2])))

返回:

[1] 28 10  8