1

例 10.1。设40个人的血型和性别如下:
(O,男),(O,女),(A,女),(B,男),(A,女),(O,女),( A,男),(A,男),(A,女),(O,男),(B,男),(O,男),B,女),(O,男),(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这样做吗?

4

2 回答 2

2

看看下面的例子,使用dplyrandjanitor

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-17T13:18:47.330 回答
0

您应该以更有用的形式发布您的数据。例如发布 的输出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   11
于 2017-09-17T14:47:56.183 回答