【问题标题】:How to parse { ; } and extract the number in first position?如何解析 { ;并提取第一个位置的数字?
【发布时间】:2020-07-27 02:24:05
【问题描述】:

我的数据的可重现子集:

owed <- c("{7; 125.04}, {203; 125.04}, {90; 125.04}", "{45; 50.72}, {355; 50.72}", "#N/A")
uuid <- c(1, 2, 3)
data <- data.frame(uuid, owed)

owed 显示每个 uuid 在以下结构中欠债的次数 {欠债天数;欠款}。每个 uuid 欠债的次数没有上限 - 有些 uuid 有 80 多次。

我想要第三列 avg_debt_days,用于计算每个 uuid 的平均债务天数。 在此示例中,结果应分别为 uuid 1、2、3 的 100、200、#N/A。

考虑到我有 100k 行数据,任何人都可以建议一种方法来有效地转换和计算它吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用嵌套的 sapplystrsplit 调用来构建一个完全矢量化的简单函数:

    get_days      <- function(x) suppressWarnings(as.numeric(gsub(" |[{]|[}]", "", x)))[1]
    get_mean_days <- function(x) mean(sapply(strsplit(x, ";"), get_days))
    days_in_debt  <- function(x) sapply(strsplit(x, ", "), get_mean_days)
    

    所以现在你可以这样做了:

    days_in_debt(data$owed)
    #> [1] 100 200  NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2017-12-25
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多