gpt4 book ai didi

r - R中字符串中由竖线分隔的数字总和

转载 作者:行者123 更新时间:2023-12-05 09:19:18 25 4
gpt4 key购买 nike

我有一个字符串,其值如下所示,用竖线分隔。

String1 <- "5|10|25|25|10|10|10|5"
String2 <- "5|10|25|25"

是否有任何直接函数可以获取字符串中数字的总和,在这种情况下,Srting1 应该是 100,string2 应该是 65,我有一个这样的字符向量。

>chk
chk
1 5|10|25|25|10|10|10|5
2 5|55|20|5|5|5|5
3 6
4 Not Available
> sum(scan(text=gsub("\\Not Available\\b", "NA", chk$chk), sep="|", what = numeric(), quiet=TRUE), na.rm = TRUE)
[1] 206

本应如此

 [1]100 100 6 NA

最佳答案

我们可以做一个scan然后 sum

sum(scan(text=String1, sep="|", what = numeric(), quiet=TRUE))

对于多个向量,将其放在 list 中并做同样的操作

sapply(mget(paste0("String", 1:2)), function(x) 
sum(scan(text=x, sep="|", what=numeric(), quiet=TRUE)))
# String1 String2
# 100 65

另一个选项是 eval(parse( (虽然不推荐)在替换 | 之后与 +

eval(parse(text=gsub("[|]", "+", String1)))
#[1] 100

或者如@thelatemail 在评论中提到的那样,分配 ( <- ) |+然后执行 eval(parse( ..

`|` <- `+`
eval(parse(text=String1))
#[1] 100

如果我们有一个 data.frame列,那么最好按 | 拆分到 listvector s,转换vector s 至 numeric (所有非数字元素都强制转换为 NA 并带有友好警告),获取 sumna.rm=TRUE

sapply(strsplit(as.character(chk$chk), "[|]"), 
function(x) sum(as.numeric(x), na.rm=TRUE))
#[1] 100 100 6 0

注意:as.character如果 'chk' 列已经是 character 则不需要类

否则,如果我们使用 scaneval(parse , 它应该为每个元素完成。

关于r - R中字符串中由竖线分隔的数字总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41157171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com