使用大规模函数更新数据框值

时间:2014-10-28 14:42:47

标签: r

我有一个数据框,需要根据不同条件对某些值进行一些手动覆盖。但是,这些条件往往采取一致的形式(在给定特定日期范围等情况下,我总是将一个值替换为另一个值)。

我想知道是否有更优雅的方式来做以下事情;我怀疑,鉴于我一遍又一遍地重复功能调用。这是一个例子:

set.seed(1234); library(dplyr)

data <- data.frame(
    biz = sample(c("telco","shipping","tech"), 50, replace = TRUE),
    region = sample(c("mideast","americas","asia"), 50, replace = TRUE),
    date = rep(seq(as.Date("2010-02-01"), length=10, by = "1 day"),5)
    )

现在,如上所述,我想更改此数据框中的值,使其符合关于其他变量值的某些条件。我的第一个想法是使用一个函数:

changeFunc <- function(df, ...) {
    df$region <- ifelse(df$date %in% daterange &
        data$biz == string1, string2, as.character(data$region))
    return(df)
}

然后实际更新数据帧,调用该函数:

daterange <- as.Date('2010-02-05') + 0:02; string1 <- 'telco'; string2 <- 'southeast'
data <- changeFunc(data, daterange, string1, string2)

问题是,我想一遍又一遍地针对&#34;字符串1和#34;的不同日期范围和值执行此操作。和&#34;字符串2&#34;,例如:

daterange <- as.Date('2010-02-07') + 0:03; string1 <- 'shipping'; string2 <- 'northeast'
data <- changeFunc(data, daterange, string1, string2)

data %.% arrange(biz, region, date)

是否有更自动化的方法对数据框值进行许多更改,并遵循一致的规则?

编辑:更清晰地更新 我最终想要做的就是不必定义&#39; daterange&#39;&#39; string1&#39;,&#39; string2&#39;并重复调用该函数。也许有一些方法可以利用&#34; apply&#34;函数有一个日期范围和字符串的预定义值列表,并一次更新所有数据框?类似的东西:

valList <- list(daterange = as.Date('2010-02-05') + 0:02, string1 = "telco", string2 = "southeast",
                daterange2 = as.Date('2010-02-07') + 0:03, string1_2 = "shipping", string2_2 = "northeast")

使用changeFunc

将其应用于数据框

但是你可以看到,我有点不清楚函数如何知道string1_2是与daterange2匹配的条件而不是daterange

0 个答案:

没有答案