私はこのようなデータフレームを持っています:
mydata
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] "-" "-" "-" "-" "+" "+" "-" "-" "+" "-" "0" "-" "0"
[2,] "-" "+" "-" "+" "-" "-" "-" "-" "+" "+" "-" "+" NA
[3,] "+"
各行について、「-」または「+」または「0」に従って要素の数を数える方法は?
たとえば、最初の行には「-」に8つの要素があり、最後の行には「+」に1、「-」に0、「0」に0があります。
使用しましたtable(mydata)
が、期待した結果が得られません。実際、最後の行では、「+」に1しか与えられませんでした(「-」には0、「0」には0も必要です)
あなたはまだtable
トリックを使用して使用することができます。
いくつかのサンプルデータ:
set.seed(2)
m <- matrix(sample(c('-','+','0'),size=39,replace=TRUE,prob=c(0.45,0.45,0.1)), nrow=3)
m
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
# [1,] "+" "+" "+" "-" "-" "-" "+" "+" "+" "+" "+" "-" "-"
# [2,] "-" "0" "-" "-" "+" "0" "+" "-" "-" "0" "+" "-" "+"
# [3,] "-" "0" "-" "+" "+" "+" "-" "+" "+" "+" "-" "-" "-"
秘訣は、すべての値を加算してから、テーブルから1を減算することです。
apply(m, 1, function(a) table(c('-','+','0',a))-1L)
# [,1] [,2] [,3]
# - 5 6 6
# + 8 4 6
# 0 0 3 1
転置されているため、行ごとの関連性を維持することを好む人もいます。
t(apply(m, 1, function(a) table(c('-','+','0',a))-1))
# - + 0
# [1,] 5 8 0
# [2,] 6 4 3
# [3,] 6 6 1
注意:apply
返されmatrix
た場合、すべての行が同じサイズのオブジェクトを返す場合にのみ。この場合、可能なすべての入力値がわかっているので、table
トリックを使用すると、常にinteger
長さ3のベクトルが存在することが保証されます。他に何かがある場合は、不規則なとして返されlist
ます。
特別な場合、NA
sの数も知りたい場合table
は、それらを合計に含めるように指示する必要もあります。
t(apply(m, 1, function(a) table(c('-','+','0',a,NA),useNA='always')-1L))
# - + 0 <NA>
# [1,] 5 8 0 0
# [2,] 6 4 3 0
# [3,] 6 6 1 0
m[1,2] <- NA
t(apply(m, 1, function(a) table(c('-','+','0',a,NA),useNA='always')-1L))
# - + 0 <NA>
# [1,] 5 7 0 1
# [2,] 6 4 3 0
# [3,] 6 6 1 0
(ここに表示されているように、「既知の値」を追加する順序は重要ではありません。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加