计数性别=男性

时间:2018-07-28 08:43:25

标签: r

如何计算R中不是sex = Male的{​​{1}}的数量。文件名是NA

survey

我收到此错误:

  

Summary.factor(c(6L,6L,6L,6L,6L,6L,6L,6L,6L,6L,6L,:     “总和”对因素没有意义

6 个答案:

答案 0 :(得分:2)

您可以使用table来获取所有计数:

> survey <- data.frame(sex= sample(c(NA, "M", "F"), 20, TRUE))
> survey
   sex
1       M
2       F
3       F
4       M
5       M
6       M
7       M
8    <NA>
9       F
10      M
11      M
12      M
13      F
14      F
15   <NA>
16      F
17      F
18   <NA>
19      F
20      F
> table(survey)
survey
F M 
9 8 

答案 1 :(得分:1)

使用outlet怎么样?使用以下@ see-king_of_knowledge中的代码,这似乎是获得最多信息的最简单方法:

summary.factor

答案 2 :(得分:1)

使用@ see-king_of_knowledge的数据集但带有RNG种子集,以使结果可重复。

set.seed(1559)    # Make the results reproducible
survey <- data.frame(sex= sample(c(NA, "M", "F"), 20, TRUE))

sum(survey$sex == "M", na.rm = TRUE)
#[1] 7

使用table验证结果。请注意参数useNA

table(survey$sex, useNA = "ifany")
#  F    M <NA> 
#  4    7    9

编辑。

在我的问题评论中,我认为@StéphaneLaurent的建议可以最好地解决sex可以是"M"还是"male"中的任何一个问题。

sum(survey$sex %in% c("M", "male"))

另一个选择是

sum(grepl("^M", survey$sex, ignore.case = TRUE))

答案 3 :(得分:0)

或者甚至使用 dplyr 方法:

library(dplyr)

survey %>% filter(!is.na(sex), sex == 'Male') %>% summarise(n = length(sex))

答案 4 :(得分:0)

这将是一种不太复杂的方法

nrow(survey[survey$sex == "Male" & !is.na(survey$sex), ])

为了展示这种方法在实践中的有效性,我们可以轻松地创建一个具有150行(5个NA,78个雄性和67个雌性的虚拟数据集:

# make some dummy data
survey <- iris
set.seed(1234)
survey$sex <- sample(c("Male", "Female"), 150, replace=TRUE)
survey$sex[c(3, 12, 45, 70, 112)] <- NA # Add some NAs for testing purposes
survey %>% head()


nrow(survey[survey$sex == "Male" & !is.na(survey$sex), ]) # 78 Males

为确认这一点,我们可以看到总共有150行,5个NA和67个女性

nrow(survey) # 150 rows total
nrow(survey[is.na(survey$sex), ]) # 5 NAs
nrow(survey[survey$sex == "Female" & !is.na(survey$sex), ]) # 67 Females

答案 5 :(得分:0)

以下内容可能会对您有所帮助。

length(df14[df14$sex=='Male' | df14$sex=='M', ])

其中输入样本数据框为:

sex=c("Female","Male","Male","Male","Female","Female","F","M","female")
df14=data.frame(sex)
df14$sex