数据帧中每个唯一组合的频率

时间:2018-02-01 12:01:35

标签: r dataframe

在数据集(N = 6000)中,我想分析(15个虚拟)变量组合的出现频率。

ID       Var1        Var2       Var3    Var15

1          1          0          0        1

2          0          1          1        1

3          1          0          0        0

6000       1          0          0        0

对于这个例子,我希望看到组合1000出现两次,1001出现一次,0111也出现一次。

我能想到的唯一方法就是为每种可能的组合计算一个变量......

有一种优雅而有效的方法吗?

我已经通读了 How to summarize all possible combinations of variables?但这是一个稍微不同的问题,Aggregating Tally counters超越了我的知识(但如果这是我的问题的答案,我将通过它)。

5 个答案:

答案 0 :(得分:2)

您可以像这样使用count

df = read.table(text = "
ID       Var1        Var2       Var3    Var15
1          1          0          0        1
2          0          1          1        1
3          1          0          0        0
6000       1          0          0        0
", header=T)

library(dplyr)

df %>% count(Var1, Var2, Var3, Var15)

# # A tibble: 3 x 5
#     Var1  Var2  Var3 Var15     n
#    <int> <int> <int> <int> <int>
# 1     0     1     1     1     1
# 2     1     0     0     0     2
# 3     1     0     0     1     1

如果您不想输入(多个)列名,请使用count_

input_names = names(df)[-1]  # select all column names apart from 1st one

df %>% count_(input_names)

# # A tibble: 3 x 5
#    Var1  Var2  Var3 Var15     n
#   <int> <int> <int> <int> <int>
# 1     0     1     1     1     1
# 2     1     0     0     0     2
# 3     1     0     0     1     1

如果要对变量进行分组并创建单个(组合)变量,可以执行以下操作:

library(dplyr)
library(tidyr)

input_names = names(df)[-1]

df %>% count_(input_names) %>% unite_("ComboVar",input_names,sep="")

# # A tibble: 3 x 2
#   ComboVar     n
# * <chr>    <int>
# 1 0111         1
# 2 1000         2
# 3 1001         1

答案 1 :(得分:1)

使用SpreadsheetApp.getActiveSheet().getRange("A1").getDisplayValue(); 包,您可以:

dplyr

答案 2 :(得分:1)

SPSS解决方案也只是汇总。 以下语法将计数放入新数据集中:

DATASET DECLARE comb.
AGGREGATE  /OUTFILE='comb' /BREAK=var1 to var15 /Noccurences=N.

您还可以将计数添加到当前数据集中,如下所示:

AGGREGATE /OUTFILE=* MODE=ADDVARIABLES /BREAK=var1 var2 var3 /Noccurences=N.

答案 3 :(得分:1)

基础R解决方案是使用[1, 'Michael', 'Emily], [2,'Mathew','Jessica'], [3, 'Jacob', 'Ashley '] 。使用AntoniosK的示例df:

table

与其他示例不同,这可以为您提供零频率。如果您不想要那些零频率示例,那么您可以简单地执行:

df = read.table(text = "
ID       Var1        Var2       Var3    Var15
1          1          0          0        1
2          0          1          1        1
3          1          0          0        0
6000       1          0          0        0
", header=T)

res <- as.data.frame(table(df[,2:5]))

#> res
#   Var1 Var2 Var3 Var15 Freq
#1     0    0    0     0    0
#2     1    0    0     0    2
#3     0    1    0     0    0
#4     1    1    0     0    0
#5     0    0    1     0    0
#6     1    0    1     0    0
#7     0    1    1     0    0
#8     1    1    1     0    0
#9     0    0    0     1    0
#10    1    0    0     1    1
#11    0    1    0     1    0
#12    1    1    0     1    0
#13    0    0    1     1    0
#14    1    0    1     1    0
#15    0    1    1     1    1
#16    1    1    1     1    0

答案 4 :(得分:0)

plyr选项:

plyr::count(df[-1])

#   Var1 Var2 Var3 Var15 freq
#1    0    1    1     1    1
#2    1    0    0     0    2
#3    1    0    0     1    1