从R中的循环返回多个结果?

时间:2012-10-31 22:00:54

标签: r for-loop return

  

可能重复:
  function with multiple outputs
  numbering rows within groups in a data frame

G'day,我有一份按地点分组的个人名单。我想生成一个新变量,根据每个人的位置为每个人提供一个数字。我想要的数据是:

place       individual
here        1
here        2
here        3
there       1
there       2
somewhere   1 
somewhere   2

我写了这个:

    nest<-data.frame(location=c("one","one","two", "three", "three", "three"))
    individual<- function(x)
      {
        pp = 1
        jj = 1
        for (i in 2:length(x)){
            if (x[i] == x[pp]){
                res<- jj+1
                pp = pp + 1
                jj = jj + 1
            }
            else{
                res<- 1
                pp = pp + 1
                jj = 1
            }
        }
        return(res)
      }

    test<- individual(nest$location)
    test

我很确定这会做我想要的,但是,我无法弄清楚如何返回多个结果值。如何更改此函数以返回每个位置值的结果?或者,使用预先存在的R包有更简单的方法吗?

P.S。在旁注中,我从nest $ individual [2]启动函数,因为当它从1启动函数并且它试图寻找前一个值(它不存在)时,它返回一个错误。如果有人想到如何解决这个问题,我很乐意听到。欢呼声。

1 个答案:

答案 0 :(得分:0)

也许是这样的......?

ddply(nest,.(location),transform,individual = seq_len(length(location)))
  location individual
1      one          1
2      one          2
3    three          1
4    three          2
5    three          3
6      two          1

ddply位于 plyr 包中)

我确信使用rle也可以做到这一点。的确,只是为了好玩:

do.call(c,lapply(rle(nest$location)[[1]],seq_len))