1

ここに簡単な質問があります。0から3の範囲の値を持つデータフレームがあり、データセットの要素数(この場合は4)を取得したいと思います。データの例を次に示します。

structure(list(X1 = c(2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L), X2 = c(1L, 
1L, 1L, 2L, 1L, 0L, 2L, 3L, 1L), X3 = c(2L, 1L, 2L, 2L, 0L, 0L, 
2L, 3L, 1L), X4 = c(1L, 2L, 2L, 2L, 1L, 2L, 0L, 2L, 2L), X5 = c(1L, 
2L, 1L, 2L, 1L, 0L, 1L, 2L, 1L), X6 = c(1L, 2L, 1L, 1L, 1L, 2L, 
1L, 2L, 1L)), .Names = c("X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA, 
-9L))

試しましdiff(range(d))たが、0はカウントされません。よろしくお願いします。

4

3 に答える 3

3

diff(range(d))最小値と最大値の差を返します。それぞれ0と3です。

あなたがしたいのは、セットにある要素の数を数えることです。試すlength(d)

d <- 0:3
length(d)

この回答へのコメントを含める...コードに話させてください

データ例:

dataset = 1:136
dataset = dataset %% 4
dim(dataset) <- c(4,34) //Now we have a table
diff(range(dataset))+1

あなたが望むようにそれは4を返します

于 2012-05-25T18:01:18.313 に答える
3

これで提供した構造を考えると、dこれを列ごとに計算できます。

> diff(range(d$X1))+1
[1] 3
> diff(range(d$X1))+1
[1] 3
> diff(range(d$X2))+1
[1] 4
> diff(range(d$X3))+1
[1] 4
> diff(range(d$X4))+1
[1] 3
> diff(range(d$X5))+1
[1] 3
> diff(range(d$X6))+1
[1] 2

または、すべての列をループすることができます

> lapply(d, function(dp) {diff(range(dp))+1})
$X1
[1] 3

$X2
[1] 4

$X3
[1] 4

$X4
[1] 3

$X5
[1] 3

$X6
[1] 2

または、すべての列の範囲をまとめて必要な場合は、それを行列として扱います。

> diff(range(as.matrix(d)))+1
[1] 4
于 2012-05-25T18:42:40.463 に答える
3

length(unique(...))マトリックスまたはデータフレームに適用すると、予期しない(完全に文書化されているものの)ことを実行します。

s <- structure(list(X1 = c(2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L), X2 = c(1L, 
1L, 1L, 2L, 1L, 0L, 2L, 3L, 1L), X3 = c(2L, 1L, 2L, 2L, 0L, 0L, 
2L, 3L, 1L), X4 = c(1L, 2L, 2L, 2L, 1L, 2L, 0L, 2L, 2L), X5 = c(1L, 
2L, 1L, 2L, 1L, 0L, 1L, 2L, 1L), X6 = c(1L, 2L, 1L, 1L, 1L, 2L, 
1L, 2L, 1L)), .Names = c("X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA, 
-9L))

データフレームに適用されると、データフレームunique内の一意の行を返します。 length()次に、データフレームの列数をカウントします。したがって、一般的に(反例は考えられません)、これは常にに等しくなりncol(s)ます。

length(unique(s))  ## 6

unique行列に適用すると、一意の行も返さlength()れますが、要素の総数がカウントされるようになりました。データの場合、これは通常、と同等になりncol(s)*nrow(s)ます。

length(unique(as.matrix(s)))  ## 54

この状況で要素に適用する場合uniqueは、次のいずれかが必要になる可能性があります。これらはすべて、元のデータフレームを単一のベクトルに折りたたみます。

length(unique(as.vector(as.matrix(s)))) ## 4
length(unique(unlist(s)))  ## 4
length(unique(c(as.matrix(s)))) ## 4

(たとえば)完全に構成されたデータフレームをカウントする方法に依存するかどうかdiff(range(x))+1は、4または5を返す必要がありますか?(@Brian Diggsが彼の回答で指摘しているように、構造をさらに平坦化する必要なしに、行列で機能します。edデータフレームでも機能します。)length(unique(...)){0,1,2,4}diff(range(...))+1unlist()

于 2012-05-25T18:53:32.907 に答える