【发布时间】:2015-02-05 19:46:00
【问题描述】:
我正在使用下面的代码将数据集分成两部分,并对每一部分执行类似的操作。然后将这两个结果重新合并在一起。我知道我可能在描述 split-apply-combine 框架,但我想不出如何简化下面的代码。
数据集有 4 个要更新的变量。 4个变量中的每一个都有一个计算新值的公式,每一半都有一个不同的公式,一共8个公式。
下面的代码是否可以通过某种程度的矢量化来改进?它似乎比必要的更冗长。我不确定如何为每个拆分半部分执行不同的操作(即使用不同的公式),除了以下方式。
data <- structure(list(site = c(1L, 1L, 1L, 1L, 1L, 1L), plot = 1:6,
C = c(40L, 30L, 10L, 5L, 0L, 0L), E = c(0L, 0L, 0L, 10L,
20L, 45L), M = c(0L, 0L, 0L, 0L, 0L, 10L), P = c(1000L, 900L,
800L, 500L, 200L, 50L), FF = c(1L, 1L, 1L, 0L, 0L, 0L)), .Names = c("site",
"plot", "C", "E", "M", "P", "FF"), class = "data.frame", row.names = c(NA,
-6L))
df1 <- data[data$FF == 1,]
df0 <- data[data$FF == 0,]
df1$C <- df1$C * 1.1
df1$E <- df1$E * 0.9
df1$M <- df1$M * 0.1
df1$P <- df1$P * 1.01
df0$C <- df0$C * 0.8
df0$E <- df0$E * 1.05
df0$M <- df0$M * 1.01
df0$P <- df0$P * 1.01
df.new <- rbind(df1, df0)
【问题讨论】:
-
等等,你用 plyr 和 data.table 标记了这个,但还没有探索如何使用它们?
-
我确实通过其他 SO 问题和答案探索了 plyr 和 data.table,以及一些我没有在这里重现的微弱尝试。但是,如果我有足够的资金与他们一起编写代码,我认为这两种方法似乎都是合适的。我可以发布非功能代码 sn-ps。谢谢。
标签: r data.table plyr dplyr