如何计算数据帧的列中特定值的出现

时间:2018-08-17 19:58:40

标签: r dplyr

我具有以下数据集,如下所示:

df

          cp.city cp.state cp.birth_date cp.age cp.gender cp.education_level cp.occupation
1          Savage       MN    1986-04-29     29         F               NULL          NULL
2        Coventry       RI    1965-12-19     NULL       F               NULL          NULL
3            NULL     NULL    1993-06-24     21         M               NULL          NULL
4     Baton Rouge       LA    1991-12-29     NULL       M               NULL          NULL
5          Tucson       AZ    1955-03-20     60         F               NULL          NULL
6         Atlanta       GA    1964-01-18     21         M               NULL          NULL
7  Sheffield Lake       OH    1956-12-27     61         F               NULL          NULL
8       Ypsilanti       MI    1991-04-26     23         F               NULL          NULL
9            NULL     NULL          NULL     49         M               NULL          NULL
10           NULL     NULL    1943-05-31     70         M               NULL          NULL
11           NULL     NULL          NULL     22         M               NULL          NULL
12           NULL     NULL    1960-12-23     54         M               NULL          NULL
13       New York       NY    1973-03-29     42         NULL            NULL          NULL
14           NULL     NULL    1960-07-12     54         M               NULL          NULL
15           NULL     NULL    1957-02-25     58         F               NULL          NULL
16      Brunswick       GA    1962-12-17     51         M               NULL          NULL
17         Savage       MN    1986-07-12     29         M               NULL          NULL
18           NULL     NULL    1985-09-27     29         M               NULL          NULL
19   Prairieville       LA    1986-01-25     28         M               NULL          NULL
   cp.contact_channel cp.language_preferred cpss.optin_language_id
1             Website                   ENG                     40
2             Website                   ENG                     40
3                NULL                  NULL                     40
4             Website                  NULL                     40
5             Website                   ENG                     40
6               Other                   ENG                     40
7             Website                   ENG                     40
8             Website                  NULL                     40
9                NULL                  NULL                     40
10               NULL                  NULL                     40
11               NULL                  NULL                     40
12               NULL                  NULL                     40
13            Website                   ENG                     40
14               NULL                  NULL                     40
15               NULL                  NULL                     40
16            Website                   ENG                     40
17            Website                   ENG                     40
18               NULL                  NULL                     40
19            Website                  NULL                     40

我希望计算出可能的输出表中每一列中NULL出现的频率和比例,如下所示:

variable   freq  proportion
cp.city     2       0.01
cp.state    4       0.03

我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

@Rui Barradas仍然是正确的主意,无论它是“实际” NULL还是字符串。给你一个完整的例子,它如何工作:

> df <- data.frame(foo = c(1,"NULL",3,4), bar= c("a","NULL","NULL","d"))
> 
> freq <- sapply(df,function(x) sum(ifelse(x=="NULL",1,0)))
> 
> prop <- freq/nrow(df)
> 
> cbind(freq, prop)
    freq prop
foo    1 0.25
bar    2 0.50

注意:提出这个答案时,我在R中的NULLNANaN之间找到了article on the difference

  

请注意,NULL与其他两个不同。 NULL表示没有值,而NA和NaN表示有一些值,尽管其中一个值可能不可用。

这也许也可以解释为什么您无法使用其中的data.frame值来初始化NULL,正如我和其他人在尝试回答此问题时发现的那样。