本网站上的第一次海报,但却是常客。
我有一个包含50只个体动物的数据集。每只动物有400-700个位置。我试图将每个人的8个连续步骤分开(例如,步骤1-8,9-16,17-24等)进行某些分析。所以我试图在数据框中添加一个新列,用于识别个人的步骤组(步骤1-8将是1,步骤9-16,将是2 ......),最终将与动物ID合并。
我正在尝试循环复制函数以获取此信息。像这样:
for (i in unique (pathdf$id)){
n<-rep(1:700,each=8,length.out=348644)
pathdf$newcolumn[i]<-n
}
不幸的是,个别群体的行号并不总是等于8.我尝试了不同的方法来解决问题,但无济于事。任何帮助将不胜感激。
答案 0 :(得分:0)
目前尚不清楚是否在每个locations
内基于id
进行排序后创建了这些步骤。如果是这种情况,首先对数据集进行排序,然后使用steps
ave
pathdf1 <- pathdf[with(pathdf, order(id, locations)),]
row.names(pathdf1) <- NULL
pathdf1 <- within(pathdf1, steps <- ave(id, id,
FUN=function(x) (seq_along(x)-1)%/%8 +1))
或使用dplyr
library(dplyr)
pathdf2 <- pathdf1 %>%
group_by(id) %>%
mutate(steps1 =rep(1:ceiling(n()/8), each=8,
length.out=n()))
all.equal(pathdf2$steps, pathdf2$steps1)
#[1] TRUE
set.seed(49)
pathdf <- data.frame(id=sample(1:20,20*40,replace=TRUE),
locations=sample(20*40))