【发布时间】:2019-05-01 02:14:59
【问题描述】:
我有一个数据框,其中一个变量将我的观察结果 (ID) 和另一个分类变量 (类型) 分组。我在 R 中工作,并试图创建一个新变量来计算 ID 中相同类型的连续观察值(数据是时间序列)。请参阅下面的示例表 - Counter 是我要创建的变量。是否计算 0 并不重要。
dat <- data.frame(id = c(rep("a", 7), rep("b", 4)),
type = c(0, 1, 1, 2, 2, 0, 1, 1, 1, 2, 0),
counter = c(0, 1, 2, 1, 2, 0, 1, 1, 2, 1, 0))
到目前为止,我能够制作计数器,虽然可能不是以最有效的方式,但我正在努力在分组 (ID) 中执行此操作并有效地在 type = 1 和 type = 2 之间切换。我编写的代码使计数器在下面。关于如何有效地做到这一点的任何想法?谢谢。
dat$counter <- 0
counter <- 0
for(i in 1:nrow(dat)){
if(dat[i,"type"] != 0){
counter <- counter + 1
dat[i,"count"] <- counter
# use to differentiate between 1 and 2?
this_group <- dat[i,"type"]
}
if(dat[i,"type"] == 0){
counter <- 0
}
}
【问题讨论】:
-
您在 for 循环中忘记了一个
)for(i in 1:nrow(dat)-- 已添加 – -
我不明白你的问题。你没有从什么开始(没有
counter?)以及你想创建什么counter- 你的第一个dat指令中的那个,或者你下面的代码给出的那个? -
@vaettchen 谢谢。我需要在我的帖子中提供的
dat中创建counter变量。用我的代码创建的counter不正确。
标签: r dataframe for-loop data-cleaning