R-将文本中的分数转换为数值

标签 r string

我正在尝试将“9¼”转换为“9.25”,但似乎无法正确读取该分数。

这是我正在使用的数据:

library(XML)

url <- paste("http://mockdraftable.com/players/2014/", sep = "")  
combine <- readHTMLTable(url,which=1, header=FALSE, stringsAsFactors=F)

names(combine) <- c("Name", "Pos", "Hght", "Wght", "Arms", "Hands",
                    "Dash40yd", "Dash20yd", "Dash10yd", "Bench", "Vert", "Broad", 
                    "Cone3", "ShortShuttle20")

例如,第一行的“手”列为“9¼”,我如何使combined $ Hands变为9.25?所有其他分数1/8-7/8相同。

任何帮助,将不胜感激。

最佳答案

您可以使用特殊的返回函数尝试在读取XML时直接将unicode编码转换为ASCII:

library(stringi)
readHTMLTable(url,which=1, header=FALSE, stringsAsFactors=F,elFun=function(node) {
        val = xmlValue(node); stri_trans_general(val,"latin-ascii")})

然后,您可以使用@Metrics的建议将其转换为数字。

例如,您可以使用@G。 this post的Grothendieck函数清除了Arms数据:
library(XML)
library(stringi)
library(gsubfn)
#the calc function is by @G. Grothendieck
calc <- function(s) {
        x <- c(if (length(s) == 2) 0, as.numeric(s), 0:1)
        x[1] + x[2] / x[3]
}

url <- paste("http://mockdraftable.com/players/2014/", sep = "")  

combine<-readHTMLTable(url,which=1, header=FALSE, stringsAsFactors=F,elFun=function(node) {
        val = xmlValue(node); stri_trans_general(val,"latin-ascii")})

names(combine) <- c("Name", "Pos", "Hght", "Wght", "Arms", "Hands",
                    "Dash40yd", "Dash20yd", "Dash10yd", "Bench", "Vert", "Broad", 
                    "Cone3", "ShortShuttle20")

sapply(strapplyc(gsub('\"',"",combine$Arms), "\\d+"), calc)

#[1] 30.000 31.500 30.000 31.750 31.875 29.875 31.000 31.000 30.250 33.000 32.500 31.625 32.875

根据您的机器,可能存在一些编码问题(请参阅注释)

关于R-将文本中的分数转换为数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28663319/

相关文章:

java - StringBuilder JAVA 的性能问题

r - 如何从变量传递 ggplot2 美学?

r - 跳过循环中的偶然错误

c++ - 构造以特定前缀开头的特定长度的字符串

java - "The constructor Window(int, int, String, Game) is undefined "

c++ - 将 streambuf 的内容复制到字符串

r - 无法使用 textbf 写粗体字符

r - 创建一个新变量来计算 R 中重复项的长度

r - 尝试在 R 中找到数据一致性

ios - 如何使用 swift 在数组中字符串的开头和结尾添加带双引号的字符串