1

果物の名前 (5 クラスの果物) を持つ 5 行 5 列の行列があるとします。この既存のマトリックスに 5 つの新しい列を追加して、各行に 1 つの果物の総数を表示し、最後に同じ種類の果物の合計を示す 1 行を追加します。データマトリックスは次のようになります。

    [,1]   [,2]   [,3]   [,4]   [,5]
[1,]mango        banana         mango
[2,]apple  kiwi         banana
[3,]            mango
[4,]mango       apple
[5,]                    orange

このような出力(データフレーム)を取得したいのですが、

    [,1]  [,2]  [,3]  [,4]  [,5] [apple] [banana] [kiwi] [mango] [orange]
[1,]mango      banana       mango   0        1       0      2        0
[2,]apple kiwi       banana         1        1       1      0        0
[3,]           mango                0        0       0      1        0
[4,]mango      apple                1        0       0      1        0   
[5,]                 orange         0        0       0      0        1
[6,]                                2        2       1      4        1

試してみgrepましたが、行列全体を列ベクトルに分解しています。私は実際にRを使用してデータマトリックス全体に対してそれを行う方法を知りません。コードは次のとおりです。

fruits <- matrix(c("mango", "", "banana", "", "mango", "apple", "kiwi", "", "banana", "","", "", "mango", "", "", "mango", "", "apple", "", "", "", "", "", "orange", ""), nrow = 5, ncol = 5, byrow = TRUE)
fruits$apple <- length(grep("apple", fruits[1:nrow(fruits), 1:ncol(fruits)]))
fruits$banana <- length(grep("banana", fruits[1:nrow(fruits), 1:ncol(fruits)]))
fruits$kiwi <- length(grep("kiwi", fruits[1:nrow(fruits), 1:ncol(fruits)]))
fruits$mango <- length(grep("mango", fruits[1:nrow(fruits), 1:ncol(fruits)]))
fruits$orange <- length(grep("orange", fruits[1:nrow(fruits), 1:ncol(fruits)]))

助けてください。

4

2 に答える 2

2

データフレームをカウントで溶かしてキャストすることもできます。次に、合計の行を追加します。

library(reshape2)
library(tidyr)

#melt fruits matrix
g <- gather(as.data.frame(t(fruits)))

#cast data wide and bind to original matrix
d <- cbind(fruits, dcast(g, key~value)[-(1:2)])

#add row of sums
rbind(d,c(rep("", 5),colSums(d[-(1:5)])))
#       1    2      3      4     5 apple banana kiwi mango orange
# 1 mango      banana        mango     0      1    0     2      0
# 2 apple kiwi        banana           1      1    1     0      0
# 3             mango                  0      0    0     1      0
# 4 mango       apple                  1      0    0     1      0
# 5                   orange           0      0    0     0      1
# 6                                    2      2    1     4      1
于 2016-02-20T15:31:40.917 に答える