0

可能重复:
具有多个输出的函数,
对数据框中组内的行进行编号

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 包来做到这一点?

PS 在旁注中,我从 nest$individual[2] 启动函数,因为当它从 1 启动函数并尝试查找先前的值(不存在)时,它会返回错误。如果有人对如何解决这个问题有想法,我很想听听。干杯。

4

1 回答 1

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

ddplyplyr包中)

我敢肯定也有一些巧妙的方法可以做到这一点rle。确实,只是为了好玩:

do.call(c,lapply(rle(nest$location)[[1]],seq_len))
于 2012-10-31T22:14:05.073 回答