r - 通过第二个因素变量的组合来总结一个因素变量
问题描述
我的数据看起来像这样
set.seed(89)
d <- data.frame(
ID=seq(1, 100),
Encounter=sample(c(1:50), 100, replace = TRUE),
EffortType=sample(c("A","B","C"), 100, replace = TRUE)
)
我认为 Encounter 变量是一个因素。
我想知道 EffortType 可能组合的频率。
我希望结果看起来像这样
EffortType N
A 8
B 8
C 9
A,B 4
A,C 8
B,C 5
A,B,C 3
我还希望能够通过 EffortType 组合对数据进行子集化。例如,我最终会得到一个 EffortType A,B 的子集,看起来像这样
ID Encounter EffortType
52 2 A
53 2 B
61 2 A
63 2 A
79 2 A
36 7 B
59 7 B
83 7 A
etc.
我确实尝试过重塑数据,以便使用“mutate”为每个 EffortType 级别设置单独的变量,然后尝试计算每个组合的实例,但如下所示没有正确执行此操作。在计数之前,我无法弄清楚如何通过遭遇“分组”。
d = mutate(d,
A = ifelse(grepl("A", EffortType), T, F),
B = ifelse(grepl("B", EffortType), T, F),
C = ifelse(grepl("C", EffortType), T, F))
d = data.table(d)
d[, .N, by = c('Encounter', 'A', 'B', 'C')]
但我并没有得到我希望的总结。请帮忙。谢谢。
解决方案
这是您第一个问题的答案:
> library(tidyverse)
> d %>% arrange(Encounter) %>%
group_by(Encounter) %>%
distinct(EffortType) %>%
arrange(EffortType) %>%
summarize(Efforts=paste(EffortType,collapse=",")) %>%
group_by(Efforts) %>% tally()
# A tibble: 7 x 2
Efforts n
<chr> <int>
1 A 6
2 A,B 7
3 A,B,C 6
4 A,C 9
5 B 6
6 B,C 5
7 C 4
如果您将上述处理保存为d
名为 的数据框z
,您可以根据每个努力组合对数据进行子集化,例如,对于A
和B
in的组合z$Efforts[2]
:
> d %>% filter(EffortType %in% unlist(strsplit(z$Efforts[2],split=",")))
ID Encounter EffortType
1 1 43 B
2 2 15 B
3 3 8 B
4 4 36 A
5 6 2 B
6 7 50 A
%>% arrange(EffortType)
如果要排序,请在末尾添加 a EffortType
。
推荐阅读
- linux - 为什么受密码保护的根账户是 Amazon EC2 中的安全问题?
- python - 根据列条件替换列表
- java - 为什么这个 java 代码不运行类并打印值?我尝试了很多但无法找到出路
- java - 从另一个 Activity 更新 TextView
- java - 如何将对象(实体)存储在内存中,以便以后仅在使用 Hibernate 的工作应用程序中获取它?
- c++ - 可以清理损坏的堆吗?
- tensorflow - 获取卷积算法失败。这可能是因为 cuDNN 未能初始化
- makefile - 安装 PyLucene 时 makefile 出现问题
- python-3.x - ModuleNotFoundError:没有名为“pygn”的模块
- docker - 在 Windows 10 上运行 wolkenkit start 时如何解决此 docker 错误