【问题标题】:Clean column data in R在 R 中清理列数据
【发布时间】:2020-09-02 16:08:48
【问题描述】:

我在尝试清理数据时遇到了一个小问题。我有一个属性数据集,其中列出了属性大小作为字符。大小列的大部分数据只是数字,但采用文本格式。如果我将它们转换为数字数据,我会因为强制而丢失许多数据。有一些特定的数据就像(20 * 40)......我无法转换。由于此数据在转换时被强制转换为 NA。有关如何处理此类问题的任何指导?

【问题讨论】:

  • 请考虑展示一个小的 erperoducible 示例和预期输出
  • 如果值为20*40,你需要800作为输出吗?
  • 如果this 是您想要的,请说出来,我将删除下面的答案并作为重复项关闭。
  • 我喜欢下面的所有答案,但是有什么办法可以将eval 包裹起来,这样它就不会变得活泼了?避免“小鲍比桌”(xkcd.com/327) 问题?
  • @akrun - 是的....我希望输出值为 800....

标签: r data-cleaning


【解决方案1】:

也许这个功能会有所帮助。

evalCell <- function(x){
  f <- function(x) eval(parse(text = x))
  sapply(x, f)
}

x <- c("(20*40)", 123, "1 + 2*3", "(1 + 2)*3")
evalCell(x)
#  (20*40)       123   1 + 2*3 (1 + 2)*3 
#      800       123         7         9 

如果不需要返回向量的名称,请让函数返回 unname(sapply(etc))

【讨论】:

    【解决方案2】:

    我们可以使用mapparse_expr

    library(purrr)
    map_dbl(x, ~ eval(rlang::parse_expr(.x)))
    #[1] 800 123   7   9
    

    数据

    x <- c("(20*40)", 123, "1 + 2*3", "(1 + 2)*3")
    

    【讨论】:

    • 感谢您的解决方案....我试过了,但没有用。我面临以下错误...解析错误(文本= x)::1:4:意外符号1:25x75 ^
    • 我想我遇到了问题......它无法将“x”读取为数学运算......那就是错误即将到来......
    • @NiMbuS 这一定是包版本问题,因为我无法重现它
    【解决方案3】:

    你可以试试

    sapply(yourColumn, function(X) eval(parse(text=X)))
    

    例子:

    > sapply(c("5+5", "22", "10*5"), function(X) eval(parse(text=X)) )
     5+5   22 10*5 
      10   22   50 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2015-11-10
      • 2021-02-03
      • 1970-01-01
      • 2015-09-29
      • 2018-07-10
      相关资源
      最近更新 更多