15

データ フレームに存在する特定の列で最も繰り返される値を取得しようとしています。サンプル データとコードを以下に示します。

data("Forbes2000", package = "HSAUR")
head(Forbes2000)


  rank                name        country             category  sales profits  assets marketvalue
1    1           Citigroup  United States              Banking  94.71   17.85 1264.03      255.30
2    2    General Electric  United States        Conglomerates 134.19   15.59  626.93      328.54
3    3 American Intl Group  United States            Insurance  76.66    6.46  647.66      194.87
4    4          ExxonMobil  United States Oil & gas operations 222.88   20.96  166.99      277.02
5    5                  BP United Kingdom Oil & gas operations 232.57   10.27  177.57      173.54
6    6     Bank of America  United States              Banking  49.01   10.81  736.45      117.55

私のサンプル データによると、保険である最も繰り返されるカテゴリを返す必要があります。

subset(subset(Forbes2000,country=="Bermuda")
4

9 に答える 9

21
tail(names(sort(table(Forbes2000$category))), 1)
于 2012-08-29T22:19:30.437 に答える
11

2 つ以上のカテゴリが最も頻繁に並んでいる可能性がある場合は、次のようなものを使用します。

x <- c("Insurance", "Insurance", "Capital Goods", "Food markets", "Food markets")
tt <- table(x)
names(tt[tt==max(tt)])
[1] "Food markets" "Insurance" 
于 2012-08-29T22:14:48.107 に答える
5

data.table パッケージを使用した別の方法。これは、大規模なデータ セットに対してより高速です。

set.seed(1)
x=sample(seq(1,100), 5000000, replace = TRUE)

方法 1 (上記で提案された解決策)

start.time <- Sys.time()
tt <- table(x)
names(tt[tt==max(tt)])
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken

時差4.883488秒

方法 2 (データ テーブル)

start.time <- Sys.time()
ds <- data.table( x )
setkey(ds, x)
sorted <- ds[,.N,by=list(x)]

most_repeated_value <- sorted[order(-N)]$x[1]
most_repeated_value

end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken

時差0.328033秒

于 2014-07-19T08:35:36.580 に答える
0

使用できますtable(Forbes2000$CategoryName, useNA="ifany")。これにより、選択したカテゴリで可能なすべての値のリストと、その特定のデータ フレームで各値が使用された回数が表示されます。

于 2015-05-23T21:08:24.637 に答える