1

これは私のサンプルデータセットです

> a
  V1   V2
1 A1 5437
2 A1 5437
3 A1 5437
4 A2 1819
5 A2 1758
6 A2 1212
7 A2 1212
8 A3 1456

列 V2 の一意の値を計算したいので、結果は次のようになります。

A1 1
A2 3
A3 1

私は自分のコードを書き始めましたが、私にはわかりません - これはどのように見えるべきですか:

old_id <- a[1,2]
old_art <- a[2,1]
for (i in nrow(a)){
  if (old_id == a[1,i+2] && old_art == a[i+2,1]){
    new_id[i] <- old_id[1,i+2]
    new_art[i] <- i
  }
  i <- i+1
}

私は次のような非常に簡単な解決策を知っています:

tapply(a[,2], a[,1], function(t) length(unique(t)))

しかし、私の仕事はループ機能を使用することです-おそらく for および if

4

2 に答える 2

0

これは宿題のように聞こえます。ただし、forループは の右側のベクトル内のすべての要素を通過しますin。これは、forループが自動的にインクリメントされるため、必要がないことも意味しますi <- i+1

したがって、forループは次のようになります

for (i in 1:nrow(a)) {
  < your code >
}
# i <- i + 1 # No need for this!

注意 i in 1:nrow(a)してくださいi in nrow(a)。私はあなたのコードをチェックしていません。あなたのfor構文だけです。forループは単なる関数であることを忘れないでください。それで

for (i in 1:3) {
  print(i)
}
#[1] 1
#[1] 2
#[1] 3

と同じです

`for`(i, 1:3, print(i))
#[1] 1
#[1] 2
#[1] 3

を参照してください?"for"

于 2014-06-24T13:59:42.987 に答える