gpt4 book ai didi

r - 在数字运行中查找范围

转载 作者:行者123 更新时间:2023-12-04 17:36:02 25 4
gpt4 key购买 nike

我正在尝试在数据框中查找年份(最好使用 plyr)

我想从中得到:

require(plyr)

dat<-data.frame(
name=c(rep("A", 11), rep("B", 11)),
year=c(2000:2010, 2000:2005, 2007:2011)
)

对此:
out<-data.frame(
name=c("A", "B", "B"),
range=c("2000-2010", "2000-2005", "2007-2011"))

很容易确定每个组是否连续运行了几年:
ddply(dat, .(name), summarise,
continuous=(max(year)-min(year))+1==length(year))

我如何将“B”组分解为两个范围?

任何想法或策略将不胜感激。

谢谢

最佳答案

无论您使用来自“plyr”还是基础 R 的函数,您都需要先建立一些组。由于您的年份是连续的,因此检测组变化的一种方法是查找 diff 的位置。不等于 1。diff创建一个长度比输入向量小 1 的向量,因此我们将其初始化为“1”并取 cumsum结果的。

把那一口解释付诸实践,你可以尝试这样的事情:

dat$id2 <- cumsum(c(1, diff(dat$year) != 1))

从这里,您可以使用 aggregate或您最喜欢的分组功能来获得您正在寻找的输出。
aggregate(year ~ name + id2, dat, function(x) paste(min(x), max(x), sep = "-"))
# name id2 year
# 1 A 1 2000-2010
# 2 B 2 2000-2005
# 3 B 3 2007-2011

使用 rangeaggregate ,您需要更改 sepcollapse , 如下:
aggregate(year ~ name + id2, dat, function(x) paste(range(x), collapse = "-"))

关于r - 在数字运行中查找范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com