1

現在、1 つの因子と複数の論理変数(単一の変数のさまざまな条件にある程度対応していますが、互いに除外していません) を持つデータ フレームがあります。

単純に比較すると、いろいろな人の車を数えたいのですが、人によっていろいろな車を持っていることがあります。そして、電話の種類も数えたいとしましょう (お互いを除外するわけではありません)。

ダミーデータ:

data = data.frame(Profession = c("Manager", "Manager", "Developer", "Developer"), Ford = c(T, F, F, T), Renault = c(F, T, T, F), Ferrari = c(T, F, F, F), iPhone = c(T, T, T, F), Android = c(T, T, F, T))

#   Profession  Ford Renault Ferrari iPhone Android
# 1    Manager  TRUE   FALSE    TRUE   TRUE    TRUE
# 2    Manager FALSE    TRUE   FALSE   TRUE    TRUE
# 3  Developer FALSE    TRUE   FALSE   TRUE   FALSE
# 4  Developer  TRUE   FALSE   FALSE  FALSE    TRUE

職業別の車と電話の種類の数を含む分割表を取得したいと思います。もちろん、すべてのFALSE(またはNA) 値に関心があるわけではありません。理想的には、次のような変数の階層構造を持つテーブルに表示したいと思います。

          Manager Developer (Total)
Car
- Ford          1         1       2
- Renault       1         1       2
- Ferrari       1         0       1
Phone
- iPhone        2         1       3
- Android       2         1       3

いじり回そうとしましtableたが、かなり道に迷っており、どこから始めればよいかわかりません。

4

2 に答える 2

3

reshape2パッケージでこれを行うこともできます。

recast(dat, variable ~ Profession, id.var = 1, fun=sum, margins="Profession")

#   variable Developer Manager (all)
# 1     Ford         1       1     2
# 2  Renault         1       1     2
# 3  Ferrari         0       1     1
# 4   iPhone         1       2     3
# 5  Android         1       2     3

recastこれを 1 つのステップで実行しますが、変数名が式に含まれている理由を確認するには、以下を参照してください。

melt(dat, 1)

その後

dcast(melt(dat, 1), variable ~ Profession, value.var='value', fun=sum)
于 2016-08-23T02:02:03.190 に答える
2

これはうまくいくはずです:

# split the data by profession, result is a list with a dataframe for every profession
data2 = split(data[, -1], data$Profession)
# colSums is then equal to the frequencies per Ford, Renault, etc.
# that is binded into a dataframe for convenience
tb = data.frame(lapply(data2, colSums))
# add a column for total
tb$Total = rowSums(tb)
于 2016-08-23T00:08:04.680 に答える