R Lappy函数到数据帧仅返回最后一个值
获取了一个数据框,其中的数字用英语拼写:R Lappy函数到数据帧仅返回最后一个值,r,lapply,R,Lapply,获取了一个数据框,其中的数字用英语拼写: df.en <- data.frame(var1 = c("two thousand","one hundred", "seventyfour"), var2 = c("twenty two","fifty", "six"), stringsAsFactors = F) > df.en var1 var2 1 two thousand twenty two 2 one
df.en <- data.frame(var1 = c("two thousand","one hundred", "seventyfour"),
var2 = c("twenty two","fifty", "six"), stringsAsFactors = F)
> df.en
var1 var2
1 two thousand twenty two
2 one hundred fifty
3 seventyfour six
问题在于使用Lappy转换上述数据帧时:
> lapply(df.en, translateToNumbers)
只返回最后计算的值
$var1
[1] 74
$var2
[1] 6
如果可能的话,我们需要翻译所有的数据帧。函数如下所示:
library(magrittr)
translateToNumbers <- function(x) {
x[] <- gsub("^thousand", "1000)+", x , ignore.case = T) %>%
sub("eleven", "+11", . , ignore.case = T) %>%
gsub("twelve", "+12", . , ignore.case = T ) %>%
gsub("thirteen", "+13", . , ignore.case = T) %>%
gsub("fourteen", "+14", . , ignore.case = T) %>%
gsub("fifteen", "+15", . , ignore.case = T) %>%
gsub("sixteen", "+16", . , ignore.case = T) %>%
gsub("seventeen", "+17", . , ignore.case = T) %>%
gsub("eighteen", "+18", . , ignore.case = T) %>%
gsub("nineteen", "+19", . , ignore.case = T) %>%
gsub("twenty", "+20", . , ignore.case = T) %>%
gsub("thirty", "+30", . , ignore.case = T) %>%
gsub("forty", "+40", . , ignore.case = T) %>%
gsub("fifty", "+50", . , ignore.case = T) %>%
gsub("sixty", "+60", . , ignore.case = T) %>%
gsub("seventy", "+70", . , ignore.case = T) %>%
gsub("eighty", "+80", . , ignore.case = T) %>%
gsub("ninety", "+90", . , ignore.case = T) %>%
gsub("one hundred", "+100", . , ignore.case = T) %>%
gsub("two hundred", "+200", . , ignore.case = T) %>%
gsub("three hundred", "+300", . , ignore.case = T) %>%
gsub("four hundred", "+400", . , ignore.case = T) %>%
gsub("five hundred", "+500", . , ignore.case = T) %>%
gsub("six hundred", "+600", . , ignore.case = T) %>%
gsub("seven hundred", "+700", . , ignore.case = T) %>%
gsub("eight hundred", "+800", . , ignore.case = T) %>%
gsub("nine hundred", "+900", . , ignore.case = T) %>%
gsub("one", "+1", . , ignore.case = T) %>%
gsub("two", "+2", . , ignore.case = T) %>%
gsub("three", "+3", . , ignore.case = T) %>%
gsub("four", "+4", . , ignore.case = T) %>%
gsub("five", "+5", . , ignore.case = T) %>%
gsub("six", "+6", . , ignore.case = T) %>%
gsub("seven", "+7", . , ignore.case = T) %>%
gsub("eight", "+8", . , ignore.case = T) %>%
gsub("nine", "+9", . , ignore.case = T) %>%
gsub("millions", ")*(1000000)+(0", . , ignore.case = T) %>%
gsub("million", ")*(1000000)+(0", . , ignore.case = T) %>%
gsub("thousand", ")*(1000)+(0", . , ignore.case = T) %>%
gsub("ten", "+10", . , ignore.case = T) %>%
gsub("and", "", . , ignore.case = T) %>%
gsub(" ", "", . , ignore.case = T) %>%
gsub("^", "(0", . , ignore.case = T) %>%
gsub("$", ")", . , ignore.case = T) %>%
gsub("\\(0\\(", "", . , ignore.case = T ) %>%
gsub("\\+\\+", "\\+\\(", . , ignore.case = T ) %>%
gsub("\\)\\+\\)", "\\)", . , ignore.case = T )
return(eval(parse( text = x)))
}
库(magrittr)
翻译数字%
gsub(“12”,“+12”,,ignore.case=T)%>%
gsub(“十三”,“+13”,,ignore.case=T)%>%
gsub(“十四”、“+14”、”,忽略.case=T)%>%
gsub(“十五”,“十五”,“十五”,忽略.case=T)%>%
gsub(“十六”,“+16”,忽略.case=T)%>%
gsub(“十七”,“+17”,忽略。案例=T)%>%
gsub(“18”,“+18”,,ignore.case=T)%>%
gsub(“十九”,“+19”,忽略.case=T)%>%
gsub(“二十”、“+20”、”,忽略.case=T)%>%
gsub(“三十”,“+30”,“忽略.案例=T)%>%
gsub(“四十”,“四十”,“四十”,忽略.case=T)%>%
gsub(“50”,“+50”,忽略。案例=T)%>%
gsub(“六十”,“+60”,忽略。案例=T)%>%
gsub(“70”、“+70”、”,忽略.case=T)%>%
gsub(“80”,“+80”,,忽略.case=T)%>%
gsub(“90”、“+90”、”,忽略.case=T)%>%
gsub(“100”,“+100”,忽略。案例=T)%>%
gsub(“二百”,“+200”,忽略。案例=T)%>%
gsub(“三百”,“+300”,“忽略.案例=T)%>%
gsub(“四百”、“+400”、,忽略。大小写=T)%>%
gsub(“五百”,“+500”,忽略.case=T)%>%
gsub(“六百”、“+600”、,忽略。大小写=T)%>%
gsub(“七百”、“+700”、”,忽略.case=T)%>%
gsub(“八百”、“+800”、,忽略。大小写=T)%>%
gsub(“九百”、“+900”、,忽略。案例=T)%>%
gsub(“一”,“一”,“一”,忽略.case=T)%>%
gsub(“两个”,“+2”,忽略。案例=T)%>%
gsub(“三”,“三”,“三”,忽略。案例=T)%>%
gsub(“四”,“四”,“四”,忽略.case=T)%>%
gsub(“五”、“+5”、”,忽略.case=T)%>%
gsub(“六”,“+6”,,忽略.case=T)%>%
gsub(“七”、“+7”、,忽略.case=T)%>%
gsub(“八”、“+8”、”,ignore.case=T)%>%
gsub(“九”、“+9”、”,ignore.case=T)%>%
gsub(“百万”,”*(1000000)+(0),,ignore.case=T)%>%
gsub(“百万”,”*(1000000)+(0),,忽略.case=T)%>%
gsub(“千”字,”*(1000)+(0),忽略.case=T)%>%
gsub(“十”,“十”,“十”,忽略.case=T)%>%
gsub(“and“,”,,ignore.case=T)%>%
gsub(“,”,,ignore.case=T)%>%
gsub(“^”,“(0)”,ignore.case=T)%>%
gsub(“$”,”,,ignore.case=T)%>%
gsub(“\\(0\\(”,“”,,,ignore.case=T)%>%
gsub(“\\+\+”,“\\+\(”,,ignore.case=T)%>%
gsub(“\\)\+\”,“\\),,,,ignore.case=T)
返回(eval(parse(text=x)))
}
你打算在你的文章中使用应用(如标题中)还是lappy
?它们的工作方式不同。如果lappy
。为什么要将整个data.frame都提供给它?您不应该执行df_en[['var1]]
?最终函数to_number()
无法处理向量。尝试lappy(df.en,矢量化(to_number))
函数translateToNumber
和to_number
之间的区别是什么?我的错。一个输入错误。但是Lappy应该像文档中所说的那样处理向量中的每个元素。所以为什么“vectorize”@Forge data.frame不是一个向量,你可以把它看作一个向量列表。在jogo的代码中,将函数矢量化,然后将其lappy到data.frame的每一列。
library(magrittr)
translateToNumbers <- function(x) {
x[] <- gsub("^thousand", "1000)+", x , ignore.case = T) %>%
sub("eleven", "+11", . , ignore.case = T) %>%
gsub("twelve", "+12", . , ignore.case = T ) %>%
gsub("thirteen", "+13", . , ignore.case = T) %>%
gsub("fourteen", "+14", . , ignore.case = T) %>%
gsub("fifteen", "+15", . , ignore.case = T) %>%
gsub("sixteen", "+16", . , ignore.case = T) %>%
gsub("seventeen", "+17", . , ignore.case = T) %>%
gsub("eighteen", "+18", . , ignore.case = T) %>%
gsub("nineteen", "+19", . , ignore.case = T) %>%
gsub("twenty", "+20", . , ignore.case = T) %>%
gsub("thirty", "+30", . , ignore.case = T) %>%
gsub("forty", "+40", . , ignore.case = T) %>%
gsub("fifty", "+50", . , ignore.case = T) %>%
gsub("sixty", "+60", . , ignore.case = T) %>%
gsub("seventy", "+70", . , ignore.case = T) %>%
gsub("eighty", "+80", . , ignore.case = T) %>%
gsub("ninety", "+90", . , ignore.case = T) %>%
gsub("one hundred", "+100", . , ignore.case = T) %>%
gsub("two hundred", "+200", . , ignore.case = T) %>%
gsub("three hundred", "+300", . , ignore.case = T) %>%
gsub("four hundred", "+400", . , ignore.case = T) %>%
gsub("five hundred", "+500", . , ignore.case = T) %>%
gsub("six hundred", "+600", . , ignore.case = T) %>%
gsub("seven hundred", "+700", . , ignore.case = T) %>%
gsub("eight hundred", "+800", . , ignore.case = T) %>%
gsub("nine hundred", "+900", . , ignore.case = T) %>%
gsub("one", "+1", . , ignore.case = T) %>%
gsub("two", "+2", . , ignore.case = T) %>%
gsub("three", "+3", . , ignore.case = T) %>%
gsub("four", "+4", . , ignore.case = T) %>%
gsub("five", "+5", . , ignore.case = T) %>%
gsub("six", "+6", . , ignore.case = T) %>%
gsub("seven", "+7", . , ignore.case = T) %>%
gsub("eight", "+8", . , ignore.case = T) %>%
gsub("nine", "+9", . , ignore.case = T) %>%
gsub("millions", ")*(1000000)+(0", . , ignore.case = T) %>%
gsub("million", ")*(1000000)+(0", . , ignore.case = T) %>%
gsub("thousand", ")*(1000)+(0", . , ignore.case = T) %>%
gsub("ten", "+10", . , ignore.case = T) %>%
gsub("and", "", . , ignore.case = T) %>%
gsub(" ", "", . , ignore.case = T) %>%
gsub("^", "(0", . , ignore.case = T) %>%
gsub("$", ")", . , ignore.case = T) %>%
gsub("\\(0\\(", "", . , ignore.case = T ) %>%
gsub("\\+\\+", "\\+\\(", . , ignore.case = T ) %>%
gsub("\\)\\+\\)", "\\)", . , ignore.case = T )
return(eval(parse( text = x)))
}