R中包含布尔列的汇总表

bbuxkriu  于 2023-02-10  发布在  其他
关注(0)|答案(3)|浏览(127)

一个表包含3列。第一列包含组A中的所有项目(以.字符表示)。第二列和第三列包含布尔向量,指示组B和组C是否也包含该项目(TRUE)或不包含该项目(FALSE)。
您如何总结该表,以了解A组中存在的项目中有多少在B组和C组中存在或不存在?
在结果表中,应该计算groupA包含B或C中不存在的条目(FALSE,FALSE)、B或C中存在的条目或B或C中存在的条目的频率。原始表有数千个条目,而不仅仅是示例数据中的几个条目。
dplyr的解决方案将会受到赞赏。
示例数据:

example <- data.frame(
 groupA = c('shshs', 'ihdfeowf', 'woefiewfh', 'awofjqweofj', 'hdhd', 'dudj'),
 groupB = c(T, T ,F, F, T, F),
 groupC = c(T, F, F, T, T, T))

expected_result <- data.frame(
 groupA = c(1, 2, 1, 2),
 groupB = c(F, T, T, F),
 groupC = c(F, T, F, T))
uujelgoq

uujelgoq1#

以下是您可以使用的内容。

example %>% 
group_by(groupB, groupC) %>% 
summarize(groupA = n()) %>% 
ungroup() %>% 
select(groupA, groupB, groupC)

使用以下输出(如我们使用dplyr的tibble,但您可以转换为传统的数据.frame)。

# A tibble: 4 × 3
  groupA groupB groupC
  <int> <lgl>  <lgl> 
1      1 FALSE  FALSE 
2      2 FALSE  TRUE  
3      1 TRUE   FALSE 
4      2 TRUE   TRUE
ylamdve6

ylamdve62#

您可以:

table(example$groupB, example$groupC) |>
  as.data.frame() |>
  (`[`)(c(3, 1, 2)) |>
  setNames(names(example))
#>   groupA groupB groupC
#> 1      1  FALSE  FALSE
#> 2      1   TRUE  FALSE
#> 3      2  FALSE   TRUE
#> 4      2   TRUE   TRUE

或者,如果你使用R〈4.1.0,那么你可以:

setNames(as.data.frame(table(example$groupB, example$groupC))[c(3, 1, 2)],
        names(example))
#>   groupA groupB groupC
#> 1      1  FALSE  FALSE
#> 2      1   TRUE  FALSE
#> 3      2  FALSE   TRUE
#> 4      2   TRUE   TRUE
hgc7kmma

hgc7kmma3#

使用dplyr汇总 Dataframe 。

library(dplyr)

example %>% 
  mutate(groupB = ifelse(groupB, "True", "False"),
         groupC = ifelse(groupC, "True", "False")) %>% 
  group_by(groupB, groupC) %>% 
  summarize(groupA = n()) %>% 
  ungroup() %>% 
  mutate(groupA = c(1, 2, 1, 2)) %>% 
  arrange(groupB, groupC) %>% 
  select(groupA, groupB, groupC)

预期输出

groupA groupB groupC
   <dbl> <chr>  <chr> 
1      1 False  False 
2      2 False  True  
3      1 True   False 
4      2 True   True

相关问题