例10.1.40人的血型和性别如下: (O,男性),(O,男性),(B,男性),(A,女性),(O,女性),(A,男性),(O,男性),(B,男性),(O,男性),B,女性),(O,男性),(A,女性),(O,男性),(O,男性),(A,女性),(A,女性),(A,男性),(A,男性),(AB,女性),(A,女性),(B,女性),(A,男性),(A,女性),(O,男性),(O,男性),(A,女性),(O,男性),(O,女性),(A,女性),(A,男性),(A,男性),(O,男性),(A,男性),(O,女性),(O,女性),(AB,男性)。 用SPSS统计软件对双向频度表中的数据进行汇总:
我可以使用R这样做吗?
发布于 2017-09-17 13:18:47
查看下面使用dplyr和janitor的示例
id = rep(1:40)
gender = sample(c("M", "F"), 40, TRUE)
blood = sample(c("O", "A"), 40, TRUE)
df = data.frame(id, gender, blood)
library(dplyr)
> df %>% group_by(gender, blood) %>% tally()
# A tibble: 4 x 3
# Groups: gender [?]
gender blood n
<fctr> <fctr> <int>
1 F A 11
2 F O 8
3 M A 8
4 M O 13
library(janitor)
df %>% tabyl(gender, blood)
gender A O
1 F 11 8
2 M 8 13发布于 2017-09-17 14:47:56
您应该以更有用的形式发布您的数据。例如发布dput(x)的输出,其中x是您的数据集的名称。大部分工作是获取您在data.frame中发布的内容。
x <- "(O,Male),(O,Female),(A,Female),(B,Male),(A,Female),(O,Female),(A,Male),
(A,Male),(A,Female),(O,Male),(B,Male),(O,Male),B,Female),(O,Male),
(O,Male), (A,Female),(O,Male),(O,Male),(A,Female),(A,Female),(A,Male),
(A,Male), (AB,Female),(A,Female),(B,Female),(A,Male),(A,Female),
(O,Male),(O,Male), (A,Female),(O,Male),(O,Female),(A,Female),(A,Male),
(A,Male),(O,Male), (A,Male),(O,Female),(O,Female),(AB,Male)"
s <- sub("\\(", "", strsplit(x, "\\),")[[1]])
s <- sub("\\)", "", s)
s <- strsplit(s, ",")
s <- lapply(s, trimws)
dat <- as.data.frame(do.call(rbind, s))
names(dat) <- c("BloodType", "Sex")在base R中,有一些函数可以创建双向表。
xtabs(~ BloodType + Sex, data = dat)
# Sex
#BloodType Female Male
# A 10 8
# AB 1 1
# B 2 2
# O 5 11https://stackoverflow.com/questions/46264209
复制相似问题