2

垂直に配置された値と頻度の組み合わせのテーブルを作成するにはどうすればよいですか?

> df = data.frame(fruit=c("apple", "banana", "cherry", "cherry", "apple", "banana", "apple", "date"));
> table(df$fruit)

 apple banana cherry   date 
     3      2      2      1

ここまでは順調ですね。しかし、私はこのようなものが欲しいです(例えば、基本的な操作と頻度に基づく値のサブセット化):

Fruit   Freq
"apple"   3
"banana"  2
"cherry"  2
"date"    1

SQLでは、それはでありSELECT fruit, COUNT(*) AS Freq FROM df GROUP BY fruit、この質問の開始点のようなテーブルを生成します: https ://stats.stackexchange.com/questions/15574/how-to-convert-a-frequency-table-into- a-値のベクトル

Rでそれを行う簡単な方法はありますか?(あるいは、これは「SQL」が多すぎて「R」が不十分な考え方を示していますか?)

4

5 に答える 5

6
data.frame(table(df))
#       df Freq
# 1  apple    3
# 2 banana    2
# 3 cherry    2
# 4   date    1

多分

setNames(data.frame(table(df)), c("Fruit", "Freq"))
#    Fruit Freq
# 1  apple    3
# 2 banana    2
# 3 cherry    2
# 4   date    1
于 2012-12-05T17:27:05.013 に答える
4

ベースRだけを使用して、row.namesとしての値で列指向になるマトリックスに変換できます。

as.matrix(table(df))
于 2012-12-05T17:27:32.220 に答える
3

meltreshape2パッケージの関数を使用する

DF <- table(df$fruit)

library(reshape2)
melt(DF)
colnames(result) <- c('Fruit', 'Freq')
result


  Fruit Freq
1  apple    3
2 banana    2
3 cherry    2
4   date    1
于 2012-12-05T17:26:29.653 に答える
0

別の答えを追加するだけです:

df = data.frame(fruit=c("apple", "banana", "cherry", "cherry", "apple", "banana", "apple", "date"));
df
   fruit
1  apple
2 banana
3 cherry
4 cherry
5  apple
6 banana
7  apple
8   date
freq <- unlist(lapply(unique(df$fruit),function(x) length(which(df$fruit ==x))))

freq
[1] 3 2 2 1
df.new <- data.frame(fruits = unique(df$fruit),freq)
df.new
  fruits freq
1  apple    3
2 banana    2
3 cherry    2
4   date    1
于 2012-12-06T09:28:51.443 に答える
0

SQLの考え方に固執したい場合は、常に「sqldf」パッケージがあります。

df = data.frame(fruit=c("apple", "banana", "cherry", "cherry", 
                        "apple", "banana", "apple", "date"))
library(sqldf)
sqldf("SELECT fruit, COUNT(*) AS Freq FROM df GROUP BY fruit")
#    fruit Freq
# 1  apple    3
# 2 banana    2
# 3 cherry    2
# 4   date    1

三!あなたはすでに答えを知っていました;)

于 2012-12-06T04:38:16.283 に答える