我相信这是一个简单的问题,我想我只是没有能力从逻辑上考虑它以进行搜索。
我有一个数据表:
Column 1: Sex (M/F)
Column 2 Plays Sport (Y/N)
我需要一个摘要表,其中显示:
Sex | Plays Sport Yes | Plays Sport No
我无法终生解决如何使用dplyr做到这一点。
如果不太复杂,则最好使用基r中的解决方案。
答案 0 :(得分:2)
使用dplyr
并对您要查找的内容进行一些假设:
library(tidyverse)
data <- data.frame(Sex = c("M", "F")[rbinom(10, 1, 0.5) + 1],
PlaysSport = c(TRUE, FALSE)[rbinom(10, 1, 0.5) + 1])
data %>%
group_by(Sex, PlaysSport) %>%
summarise(count = n())
# A tibble: 4 x 3
# Groups: Sex [?]
Sex PlaysSport count
<fctr> <lgl> <int>
1 F FALSE 1
2 F TRUE 3
3 M FALSE 4
4 M TRUE 2
答案 1 :(得分:2)
我们可以将count
与spread
一起使用
library(tidyverse)
df1 %>%
count(Sex, Sport) %>%
spread(Sport, n, fill = 0)
# A tibble: 2 x 3
# Sex N Y
# <chr> <dbl> <dbl>
#1 F 2 0
#2 M 3 1
df1 <- data.frame(Sex = c("M", "M", "F", "M", "M", "F"),
Sport = c("N", "Y", "N", "N", "N", "N"), stringsAsFactors = FALSE)
答案 2 :(得分:0)
您可以使用table
# dummy data
df1 <- data.frame(Sex = c("M", "M", "F", "M", "M", "F"),
Sport = c("N", "Y", "N", "N", "N", "N"), stringsAsFactors = FALSE)
df1
# Sex Sport
#1 M N
#2 M Y
#3 F N
#4 M N
#5 M N
#6 F N
结果
table(df1)
# Sport
#Sex N Y
# F 2 0
# M 3 1
这里是reshape2::dcast
reshape2::dcast(df1, Sex ~ paste0("Sport_", Sport),
fun.aggregate = length # default
)
结果
# Sex Sport_N Sport_Y
#1 F 2 0
#2 M 3 1