我有一个包含两组数字的字符串变量的数据框。我需要将一个数字乘以下一个数字,并将结果分配给另一个字段。这对于正则表达式来说很简单,但问题是某些观察包含需要计算的多个输入,并且我很难概念化如何迭代这些字符串,直到没有额外的对来进行乘法。然后,一旦所有对都成倍增加,就必须将它们相加并分配给新变量。
这是我的原始数据
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
有关如何迭代每个逗号的任何建议都将非常感激。谢谢!
答案 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