我有重复测量数据。
我需要创建一个循环,在参与者中逐步计算每个观察值并标记它。
我是编写循环的新手。我的逻辑是,对于唯一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)
}
}
谢谢! 贾斯汀
答案 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很酷!?)