【发布时间】:2015-08-29 03:16:33
【问题描述】:
这是一个示例数据框:
df <- data.frame(x=c(1,1,2,2,2,3,3,4,5,6,6,6,9,9),y=c(1,2,3,4,6,3,7,8,6,4,3,7,3,2))
我想根据每个x 组的y 的观察次数生成一个数字序列(例如,x=1 有两个y 的观察)。我希望序列在每个x 组之后不断增加并跳2。
这个例子的期望输出是:
1,2,5,6,7,10,11,14,17,20,21,22,25,26
我怎样才能在 R 中简单地做到这一点?
【问题讨论】:
-
如果它们已经分组,并按照您显示的方式进行标记,您不能将其作为
df$rowname <- 1:dim(df)[1];df$newNumber <- df$rowname + (df$x-1)*2运行,而df$newNumber将是所需的输出吗? -
@chappers 感谢这个想法,但是我正在寻找一个通用的解决方案,我刚刚意识到我的 x 是顺序的,可以通过这个来解决,但 x 真的可以是任何值跨度>
-
扩展@chappers 的想法,
library(data.table); setDT(df)[, gr:= .GRP, x][, 1:.N + (gr-1)*2]#[1] 1 2 5 6 7 10 11 14 17 20 21 22 25 26 -
@xyy 这实际上并不重要,因为您可以将一个因子转换为数字...
-
或使用
base R,(with(df, match(x, unique(x)))-1)*2 + 1:nrow(df)