R 如何计算数据帧列中特定值的出现次数
我有如下数据集,如下所示:R 如何计算数据帧列中特定值的出现次数,r,dplyr,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
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
variable freq proportion
cp.city 2 0.01
cp.state 4 0.03
我希望计算可能输出表中每列出现的NULL
的频率和比例,如下所示:
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
variable freq proportion
cp.city 2 0.01
cp.state 4 0.03
非常感谢您的帮助。@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
>df
>频率
>支柱
>cbind(频率,道具)
频率道具
foo 10.25
巴2 0.50
注意:在回答这个问题时,我在R中的NULL
,NA
和NaN
之间发现了这个问题:
请注意,NULL与其他两个不同。NULL表示没有值,而NA和NaN表示有一些值,尽管其中一个值可能不可用
这也可以解释为什么你不能用
NULL
值初始化data.frame
,正如我和其他人在回答这个问题时发现的那样。@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
>df
>频率
>支柱
>cbind(频率,道具)
频率道具
foo 10.25
巴2 0.50
注意:在回答这个问题时,我在R中的NULL
,NA
和NaN
之间发现了这个问题:
请注意,NULL与其他两个不同。NULL表示没有值,而NA和NaN表示有一些值,尽管其中一个值可能不可用
这也可以解释为什么您不能用
NULL
值初始化数据.frame
,正如我和其他人在回答这个问题时发现的那样。sapply(df,函数(x)sum(is.NULL(x))
。这给出了比例。那么,计算比例就很简单了。奇怪。我从来没有在这样的列中获得过NULL
,data.frame(a=1:3,b=list(NULL,NULL,NULL))
对我来说失败了。这是一个“R”NULL
还是一个文本字符串“NULL”
?(@RuiBarradas,您对我的示例数据的函数返回所有0
,这与(正常)帧中的noNULL
一致。)我认为这是一个字符串,而不是逻辑字符串NULL@r2evans我已经用NA
测试了我的sapply
,但不能用NULL
测试。此外,在我的第一条评论中,我的意思显然是“这给出了频率。”@RuiBarradas是的,但除非发生了一些非常奇怪的事情,sum(is.null(x))
将始终为0。(是的,我用NA
进行了测试,考虑到帧中NULL
s的假设,你的方法很好,这显然不是事实。不破坏方法,将其更改为sum(x==“NULL”)
是可比的。sapply(df,函数(x)sum(is.NULL(x)))
。这给出了比例。然后计算比例就很简单了。奇怪。我从来没有在这样的列中得到过NULL
,data.frame(a=1:3,b=list(NULL,NULL,NULL))
对我来说失败。这是一个“R”NULL
还是一个字符串“NULL”
?(@RuiBarradas,您对我的示例数据的函数返回所有0
,这与(正常)帧中的noNULL
一致。)我认为这是一个字符串,而不是逻辑字符串NULL@r2evans我已经用NA
测试了我的sapply
,但不能用NULL
测试。而且,在我的第一条评论中,我显然是指“这给出了频率。”@RuiBarradas是的,但除非发生了什么奇怪的事情,sum(is.null(x))
将始终为0。(是的,我用NA
进行了测试,考虑到帧中NULL
s的假设,你的方法很好,这显然不是事实。不破坏方法,将其更改为sum(x==“NULL”)
是可比的。当你想要0
和1
时,使用as.integer(条件)
,它的速度快了几个数量级。向上投票。1)你每天都会学到新东西,谢谢!2)这不取决于这里需要哪个比例吗?除以总和(频率)
将告诉你该频率与所有其他频率/列的比较情况。我假设OP想知道每个列的比例(即该列中NULL
的百分比)。这两个数字可能都很有趣,这取决于您对数据的最终目标。是的,关于第2点您是对的)。这就是为什么我删除了它。如果您想要0
和1
使用作为.integer(条件),而不是ifelse
,它的速度快了几个数量级。向上投票。1)你每天都会学到新东西,谢谢!2)这不取决于这里需要哪个比例吗?除以总和(频率)
将告诉你该频率与所有其他频率/列的比较情况。我假设OP想知道每个列的比例(即该列中NULL
的百分比)。这两个数字可能都很有趣,这取决于您对数据的最终目标。是的,关于第2点您是对的)。这就是我删除它的原因。