1

5 つの期間にわたって繰り返し測定された大規模なデータセットがあります。

   2012  2009  2006  2003  2000
    3     1     4     4     1
    5     3     2     2     3
    6     7     3     5     6 

2000 年から 2012 年までの一意の値の数である新しい列を追加したいと思います。たとえば、

   2012  2009  2006  2003  2000  nunique
    3     1     4     4     1      3
    5     3     2     2     3      3
    6     7     3     5     6      4

私はRで作業していますが、それが役立つ場合、各期間で測定値の可能な異なる値は14しかありません。

このページを見つけました: R の一連の変数で値の出現をカウントし (行ごと)、提供されているさまざまなソリューションを試しました。ただし、それが私に与えるのは、一意の値の数ではなく、各値の数です。ここでの他の同様の質問は、各行ではなく、変数/列内の一意の値の数をカウントすることについて尋ねているようです。任意の提案をいただければ幸いです。

4

4 に答える 4

1

大規模なデータセットがある場合は、行のループを避け、S4Vectors などのより高速なフレームワークを使用することをお勧めします。

df <- data.frame('2012'=c(3,5,6),
             '2009'=c(1,3,7),
             '2006'=c(4,2,3),
             '2003'=c(4,2,5),
             '2000'=c(1,3,6))

dup <- S4Vectors:::duplicatedIntegerPairs(as.integer(as.matrix(df)), row(df))
dim(dup) <- dim(df)
rowSums(!dup)

または、matrixStats パッケージ:

m <- as.matrix(df)
mode(m) <- "integer"
rowSums(matrixStats::rowTabulates(m) > 0)
于 2014-09-24T23:09:43.910 に答える
0

トリックは、'apply' を使用して、各行を変数 (x など) に割り当てることです。その後、カスタム関数を作成できます。この場合は、'unique' と 'length' を使用して必要な答えを取得する関数です。

df <- data.frame('2012'=c(3,5,6), '2009'=c(1,3,7), '2006'=c(4,2,3), '2003'=c(4,2,5), '2000'=c(1,3,6))

df$nunique = apply(df, 1, function(x) {length(unique(x))})
于 2014-09-24T21:00:46.023 に答える