相关疑难解决方法(0)

循环在ddply中创建新变量

我正在使用ddply来聚合和汇总数据框变量,我有兴趣循环遍历我的数据框列表来创建新变量.

new.data <- ddply(old.data, 
                  c("factor", "factor2"),
                  function(df)
                    c(a11_a10 = CustomFunction(df$a11_a10),
                      a12_a11 = CustomFunction(df$a12_a11),
                      a13_a12 = CustomFunction(df$a13_a12),
                      ...
                      ...
                      ...))
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在ddply中插入一个循环,以便我可以避免编写每个新的汇总变量,例如

for (i in 11:n) {
  paste("a", i, "_a", i - 1) = CustomFunction(..... )
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是它实际完成的方式,但我只是想表明我是如何构思它的.有没有办法在ddply或通过列表调用的函数中执行此操作?

更新:因为我是新用户,我无法回答我自己的问题:

我的回答涉及Nick的回答和Ista评论的想法:

func <- function(old.data, min, max, gap) {
  varrange <- min:max
  usenames <- paste("a", varrange, "_a", varrange - gap, sep="")
  new.data <- ddply(old.data,
                    .(factor, factor2),
                    colwise(CustomFunction, c(usenames)))
}
Run Code Online (Sandbox Code Playgroud)

for-loop r plyr

10
推荐指数
1
解决办法
2482
查看次数

R:反转时间序列对象中的数据

我找到了一种用时间序列来反向(即预测过去)的方法.现在我只是在R中编程.

我想反转时间序列数据,以便我可以预测过去.我该怎么做呢?

假设原始时间序列对象如下所示:

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 116  99 115 101 112 120 120 110 143 136 147 142
2009 117 114 133 134 139 147 147 131 125 143 136 129
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像'backcasting':

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2008 129 136 143 125 131 147 147 139 134 133 114 117
2009 142 147 136 143 110 120 120 112 101 115  99 116 …
Run Code Online (Sandbox Code Playgroud)

excel reverse r time-series

10
推荐指数
1
解决办法
5251
查看次数

我不明白函数里面的错误"找不到对象"

我大致有这个功能:

plot_pca_models <- function(models, id) {
  library(lattice)

  splom(models, groups=id)
}
Run Code Online (Sandbox Code Playgroud)

而我这样称呼它:

plot_pca_models(data.pca, log$id)
Run Code Online (Sandbox Code Playgroud)

导致此错误:

Error in eval(expr, envir, enclos) : object 'id' not found
Run Code Online (Sandbox Code Playgroud)

当我没有包装功能调用它时:

splom(data.pca, groups=log$id)
Run Code Online (Sandbox Code Playgroud)

它引发了这个错误:

Error in log$id : object of type 'special' is not subsettable
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

 id <- log$id
 splom(models, groups=id)
Run Code Online (Sandbox Code Playgroud)

它表现得像预期的那样.

请任何人解释为什么它的行为如此以及如何纠正它?谢谢.

顺便说一句:我在这里也知道类似的问题,例如:

但他们都没有帮助我.

编辑:根据要求,有完整的"plot_pca_models"功能:

plot_pca_models <- function(data, id, sel=c(1:4), comp=1) {
  # 'data' ... princomp objects
  # 'id'   ... list of samples id (classes)
  # 'sel'  ... list of models …
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
1
解决办法
2万
查看次数

将参数传递给R函数使用的plyr

我无法解决一个问题.想写一个这样的函数:

   f.describe <- function(.data, .var, .by)
   {
        require(plyr)

        res <- ddply(.data, .by, 
    summarize, 
    N = sum(!is.na(.var))
    `Mean (SD)`=sprintf("%5.2f (%5.2f)", 
                       mean(.var, na.rm=TRUE), sd=sd(.var, na.rm=TRUE)),
     Median = sprintf("%5.2f", median(.var))    
        )
    res
   }
Run Code Online (Sandbox Code Playgroud)

但我找不到传递变量进行处理的方法(.var).有这个错误:

错误eval(expr,envir,enclos):找不到对象'.var'(从其他语言翻译,因此对于英语用户来说可能不是逐字的)

我试过eval,替代但没有解决方案......非常感谢你的帮助.有时我不理解R用于评估的规则.

r

4
推荐指数
1
解决办法
968
查看次数

标签 统计

r ×4

excel ×1

for-loop ×1

plyr ×1

reverse ×1

time-series ×1