可能重复:
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启动函数并且它试图寻找前一个值(它不存在)时,它返回一个错误。如果有人想到如何解决这个问题,我很乐意听到。欢呼声。
答案 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))