【发布时间】:2022-10-18 04:33:51
【问题描述】:
我有一个 R df,其中一列,赋值,如下所示:
| course | instance | assignment |
|---|---|---|
| 1 | 1 | A |
| 1 | 1 | B |
| 1 | 2 | B |
| 1 | 2 | C |
| 2 | 1 | A |
| 2 | 1 | C |
| 2 | 2 | B |
| 2 | 2 | A |
我需要为跨实例的课程中的所有作业创建一个超集(因为没有更好的术语)。
例如:课程 1 提供了 2 次课程,在实例 1 中包含作业 A 和 B,在实例 2 中包含作业 B 和 C。本课程的作业超集应每次包含作业 A、B 和 C .换句话说,在课程实例中至少出现一次的每个作业都应该在超集中出现一次。
更新:我已经尝试了下面的建议。
library(tidyverse); df %>% group_by(course) %>%
summarise(all_assignments = toString(sort(unique(assignment))),
.groups = "drop")
这将返回以下内容:
| all_assignments | .groups |
|---|---|
| A | drop |
我现在已经在以下示例数据集上对此进行了测试:
df <- read.table(text = "course instance assignment
1 1 A
1 1 B
1 2 B
1 2 C
2 1 A
2 1 C
2 2 B
2 2 A", header = T)
它返回一个类似的结构:
| all_assignments | .groups |
|---|---|
| A, B, C | drop |
显然这个确切的代码对其他人有用,所以我想知道我做错了什么?
【问题讨论】:
-
您能否包括您的预期输出。这将帮助我们了解您的需求。例如,
library(tidyverse); df %>% group_by(course) %>% summarise(all_assignments = toString(sort(unique(assignment))), .groups = "drop")为每个course返回所有instances 的逗号分隔字符串。这就是你所追求的吗? -
是的,这是基本思想。我尝试了您的建议并使用单行的输出更新了问题。我确定这是我遗漏的一个小错误。
-
请参阅下面的完全可重现的示例。确保您的实际数据与您的样本数据相匹配,例如列名完全相同(R 区分大小写)。
标签: r dictionary key unique instance