使用循环计算每个参与者的观察结果

时间:2012-08-22 13:50:05

标签: r loops

我有重复测量数据。

我需要创建一个循环,在参与者中逐步计算每个观察值并标记它。

我是编写循环的新手。我的逻辑是,对于唯一ID列表中的每个项目,计算其中的每一行,并将一些函数应用于该行。

有人能指出我做错了吗?

data$Ob <- 0

for (i in unique(data$id)) {
  count <- 1
  for (u in data[data$id == i,]) {
      data[data$id ==u,]$Ob <- count
      count <- count + 1
      print(count)
    }
}

谢谢! 贾斯汀

3 个答案:

答案 0 :(得分:4)

您还可以使用ave

set.seed(1)
data <- data.frame(id = sample(4, 10, TRUE))
data$Ob = ave(data$id, data$id, FUN=seq_along)
data
   id Ob
1   2  1
2   2  2
3   3  1
4   4  1
5   1  1
6   4  2
7   4  3
8   3  2
9   3  3
10  1  2

答案 1 :(得分:2)

# Generate some dummy data
data <- data.frame(Ob=0, id=sample(4,20,TRUE))

# Go through every id value
for(i in unique(data$id)){
    # Label observations
    data$Ob[data$id == i] = 1:sum(data$id == i)
}

请注意,虽然在{R}中for循环非常慢。在这个简单的情况下它们可以很好地工作,但如果你的数据框中有数百万行,你最好做一些纯粹的矢量化。< / p>

答案 2 :(得分:1)

但你不需要循环......

data <- data.frame (id = sample (4, 10, TRUE))

##    id
## 1   3
## 2   4
## 3   1
## 4   3
## 5   3
## 6   4
## 7   2
## 8   1
## 9   1
## 10  4

data$Ob  [order (data$id)] <- sequence (table (data$id))

##    id Ob
## 1   3  1
## 2   4  1
## 3   1  1
## 4   3  2
## 5   3  3
## 6   4  2
## 7   2  1
## 8   1  2
## 9   1  3
## 10  4  3

(也适用于字符或因子ID)

(不是R很酷!?)