如何计算R中不是sex = Male
的{{1}}的数量。文件名是NA
。
survey
我收到此错误:
Summary.factor(c(6L,6L,6L,6L,6L,6L,6L,6L,6L,6L,6L,: “总和”对因素没有意义
答案 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