假设我有两列的数据(Df)。下面给出了其中的一部分。
familyGroup Sex
1 601 2
2 601 1
3 601 2
4 601 1
5 601 1
6 601 2
7 602 2
8 602 1
9 602 2
10 602 1
11 602 1
12 602 1在性别栏<1代表male>,<2代表female>。我想要一个familyGroup的男性和女性的总数,并在两个新的列中报告(比如在男性和女性下面)
我使用tidyverse包中的dplyr,用group_by、summary和mutate做了一些试验
我使用dplyr尝试了以下代码。然而,输出并不像预期的那样。
df %>%
group_by(familyGroup, Sex) %>%
summarise(male = sum(Sex==1), female = sum(Sex == 2)) %>%
select(familyGroup, male, female)
# A tibble: 74 x 3
# Groups: familyGroup [40]
familyGroup male female
<fct> <int> <int>
1 601 3 0
2 601 0 3
3 602 4 0
4 602 0 2预期的输出如下所示
familyGroup male female
601 3 3
602 4 2发布于 2019-09-14 20:05:22
您可以使用data.table包中的dcast执行此操作,如下所示:
library(data.table)
library(dplyr)
dt <- read.table(text = " familyGroup Sex
1 601 2
2 601 1
3 601 2
4 601 1
5 601 1
6 601 2
7 602 2
8 602 1
9 602 2
10 602 1
11 602 1
12 602 1")
dt <- data.table(dt)
dt[,
sexLabel := dplyr::case_when(
Sex == 1 ~ "male",
Sex == 2 ~ "female",
TRUE ~ "(unknown)"
)
]
res <- dcast(
formula = familyGroup ~ sexLabel,
data = dt,
fun.aggregate = length,
value.var = "Sex"
)
res
# familyGroup female male
# 1: 601 3 3
# 2: 602 2 4https://stackoverflow.com/questions/57934302
复制相似问题