-2

反復測定データを使用しました。

参加者内の各観測値を段階的にカウントし、ラベルを付けるループを作成する必要があります。

ループを書くのは初めてです。私の論理は、一意の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)
    }
}

ありがとう!ジャスティン

4

3 に答える 3

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
于 2012-08-22T16:37:28.510 に答える
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で有名ですが、この単純なケースでは正常に機能しますが、データフレームに数百万の行がある場合は、純粋にベクトル化されたものを実行することをお勧めします。

于 2012-08-22T13:58:17.207 に答える
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または因子IDでも機能します)

(Rはかっこいいじゃないですか!?)

于 2012-08-22T16:30:22.543 に答える