我有一个R语言的数字向量:
c(0.9, 0.81)
我希望能够提取此向量中每个元素的数字数量。在这种情况下,该命令将返回1
和2
,因为数字是9
和81
。是否有一种方便的方法来实现?如果结果是1
,如何扩展到两位数字?例如,我想要返回的向量是
c(0.90, 0.81)
我有一个R语言的数字向量:
c(0.9, 0.81)
我希望能够提取此向量中每个元素的数字数量。在这种情况下,该命令将返回1
和2
,因为数字是9
和81
。是否有一种方便的方法来实现?如果结果是1
,如何扩展到两位数字?例如,我想要返回的向量是
c(0.90, 0.81)
要计算小数点后的位数,您可以使用 nchar
函数。
sapply(v, nchar) - 2 # -2 for "." and leading 0
# 1 2
nchar(sub('.*\\.', '', v1))
。顺便说一句,nchar(v1)-2
也应该可以。 - akrun32.52
。 - akrunx <- c(0.9,0.81,32.52,0);
nchar(sub('^0+','',sub('\\.','',x)));
## [1] 1 2 4 0
该代码会去除小数点,然后去掉所有的前导零,并最终使用字符串长度作为计算有效数字数量的间接手段。如果输入为零,则自然地返回零,但是如果您愿意,可以使用 if
表达式显式测试该情况并返回1。
正如akrun提到的那样,要在小数点后打印两个数字:
sprintf('%.2f',x);
## [1] "0.90" "0.81" "32.52" "0.00"
format(v1, nsmall=2)
进行打印或者sprintf('%.2f', v1)
。您想将其返回为numeric
类吗?也许可以使用round(v1,2)
。 - akrunv
,您将得到0.90
和0.81
。向量会自动打印出所有元素中最高位数的数字。 - Rich Scriven