【发布时间】:2016-10-15 00:19:47
【问题描述】:
看起来很简单,想不出更简单的方法。我在下面有一个x 向量,需要为连续值创建组名。我的尝试是使用rle,有更好的想法吗?
# data
x <- c(1,1,1,2,2,2,3,2,2,1,1)
# make groups
rep(paste0("Group_", 1:length(rle(x)$lengths)), rle(x)$lengths)
# [1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4"
# [9] "Group_4" "Group_5" "Group_5"
【问题讨论】:
-
为什么不直接使用粘贴?
paste0('groupe_', c(1,1,1,2,2,2,3,2,2,1,1)) -
因为如果直接粘贴最后两组将是2和1而不是4和5
-
@MamounBenghezal 请检查预期输出,首先
1是Group_1,最后1是Group_5 -
不错的尝试。
rle源代码中的一个关键行使用了diff,正如@Roland 在下面所做的那样。 -
@CarlWitthoft 名称与值的顺序相同,因此直接映射,即:
names(x) <- myGroups。我的实际数据是 data.frame,所以我可以应用相同的数据并为聚合函数创建一个Group列。
标签: r run-length-encoding