我想从一栏中删除不必要的信息,以求总计。
Col_X当前在一个整体中有多个部分,并由其5位数字段“ 19651”划分。段号需要删除,货币需要移动到新的列,并且总计。
因此,对于最后一部分,应该有两列显示
Col_X | CCY
429.34 | EUR
Col_X
19651: 10 GBP
19662: 1.2 GBP
19663: 6 GBP
19852: 108.88 EUR
19926: 147 EUR | 39927: 86.9 EUR | 39928: 49.35 EUR
19994: 30.95 EUR | 29990: 298.4 EUR | 19996: 99.99 EUR
我试图删除数字的第一部分,但是失败了-所以我正在努力找出如何在我需要的关键数据之间删除它们。
Col_X <- gsub("^.?:","",bill$Col_X)
代码的第一部分未能从一开始删除任何数字。
答案 0 :(得分:1)
您可以使用类似的方法:删除除货币值以外的所有值,并对每个条目求和。然后,从每个单词中抓取3个字母的单词。然后,将它们粘贴在一起:
x <- c("10 GBP", "1.2 GBP", "6 GBP", "108.88 EUR", "147 EUR | 39927: 86.9 EUR | 39928: 49.35 EUR")
amounts <- lapply(x, function(m) sum(scan(text=gsub("\\s*(?:\\d+:|[A-Z]+)\\s*", "", m), sep="|", what = numeric(), quiet=TRUE)))
currency <- sub(".*?\\b([A-Z]{3})\\b.*", "\\1", x)
paste(amounts, currency, sep=" ")
## => [1] "10 GBP" "1.2 GBP" "6 GBP" "108.88 EUR" "283.25 EUR"
请参见R demo online。
gsub("\\s*(?:\\d+:|[A-Z]+)\\s*", "", m)
removes
\s*
-0 +空格(?:\d+:|[A-Z]+)
-1个以上的数字和后面的:
或1个以上的大写ASCII字母\s*
-0 +空格 sub(".*?\\b([A-Z]{3})\\b.*", "\\1", x)
"extracts"的前三个字母的货币代码:
.*?
-尽可能少包含0个字符\b([A-Z]{3})\b
-第1组(\1
):一个单词边界,3个ASCII字母,一个单词边界.*
-尽可能多0个字符