我花了几个小时尝试寻找解决方案来完成我认为很简单的任务,但我失败了。
我有一个由 3 个不同字符组成的字符串('I','R' & 'O')
长度从 1 到 6。
E.g
IRRROO
RRORRR
IIR
RIRRO
每个字符代表一个数字I=1,R=2,O=3
我需要将此字符串转换为单个数字,与位置相乘并对结果求和。例如
IRRROO ---> (1*1)+(2*2)+(2*3)+(2*4)+(3*5)+(3*6) =52
IIR ---> (1*1)+(1*2)+(2*3) =9
在此先感谢您的帮助。
因子具有等价的数值。您可以在本示例中很好地利用这一点:
# original
x1 <- "IRRROO"
# 1 2 3
levs <- c("I", "R", "O")
# split the string and convert to factors, then to numeric
x1f <- as.numeric(factor(strsplit(x1, "")[[1]], levels=levs))
# tally it up
sum(x1f * seq_along(x1f))
或者作为一个不错的单行函数:
sumValue <- function(x, levs=c("I", "R", "O"))
sum(seq.int(nchar(x)) * as.numeric(factor(strsplit(x, "")[[1]], levels=levs)))
sumValue("IRRROO")
# [1] 52
sumValue("IIR")
# [1] 9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)