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)))
    }