【发布时间】:2019-05-18 11:14:52
【问题描述】:
编辑 1: 清晰度和错字,更多示例。
我有一个数据集,其中有一列 (Action) 包含文本值。我想计算唯一值(对于给定的Operatie)并根据它们的 ID(== Operatie)将它们放在一个新列中。 Action 中有 21 个唯一值。
在新数据集中,重要的是新列(计算来自Action 的单个文本值)链接到Q.Operatie 的值(具有值Q1, Q2, Q3, Q4)和Operatie(@987654333 @)。
因此,如果我们在示例中取前 4 行,那么我们将有一个名为 Q1.Delegerend == 2 的列。而下一列将是 Q1.Goedaardig == 1。因为对于Operation == 1,Delegerend 出现 2 次,Goedaardig 出现 1 次。对于这个例子,我忽略了Instruerend。
这会导致 4 (Q1.X:Q4.X) 列,每个列在其尊重范围内都有其唯一的文本值计数。因此,Q1.Delegerend、Q2.Delegerend、Q3.Delegerend、Q4.Delegerend 用于Operatie == 1 的行,用于Delegerend(21 个唯一的一个)。我们可能需要设置“转移矩阵”,从而拆分观察结果。
原始数据示例如下所示,新数据集将在单行中包含每个唯一值的列,请参见原始数据下方的示例。
Operatie Tijdstip Berekening.voor.D Minuut.van.de.Operatie Berekening.voor.F Q.Operatie Actor Responder Action Focus InterTeam
1 1 08:44:56 00:00 1 1% Q1 C OA Delegerend 1 b
2 1 08:45:43 00:00 2 2% Q1 C* AM Goedaardig 1 a
3 1 08:46:45 00:01 3 4% Q1 OA OA* Instruerend 3
4 1 08:47:10 00:02 3 4% Q1 C OA* Delegerend 1 b
5 1 08:48:03 00:03 4 6% Q1 C Team Onderwijzend 1 b
6 1 08:48:44 00:03 5 7% Q1 C Team Bewustwording 1 b
7 1 08:49:28 00:04 6 8% Q1 C* C Instruerend 1 b
8 1 08:50:30 00:05 7 9% Q1 C C* Onderwijzend 1 b
9 1 08:50:47 00:05 7 10% Q1 C AM Delegerend 1 a
10 1 08:51:47 00:06 8 11% Q1 C OA Instruerend 1 b
因此,最终,我希望一行 (Operatie) 有 21 列,频率为该唯一文本(取自列Action),已排序按Q.Operatie 的级别。是的,这会导致很多列,21 个唯一值乘以 4。但这没关系。
Operatie Minuten Chirurg1 Chirurg2 Q1.Delegerend Q2.Delegerend Q3.Delegerend Q4.Delegerend Q1.Goedaardig
1 1 72 10 11 2 4 5 5
2 2 30 10 11 2 2 6 12
3 3 102 1 2 1 5 12 ...
4 4 212 2 NA 3 13 13
5 5 37 4 NA 1 2 ...
6 6 57 2 NA 3 9
7 7 120 3 NA 1 9
8 8 146 3 NA 1 6
9 9 143 2 9 3 10
10 10 189 9 2 3 12
所以我尝试为 dplyr 制作一个列表,见下文。我没能让它流畅地工作。我的印象是可以调用一个列表来计算唯一值,但不确定如何使用dplyr 来编写它。我查看了一些帖子,但找不到任何关于计算多行以将其迁移到新数据集的信息。但是,后者很简单,我只需要列。
my_list <- list(unique(sort(obs_IND$Action)))
obs_IND %>%
count(my_list) %>%
group_by(Operatie) %>%
tally()
使用来源:
【问题讨论】:
-
为什么按“四分位”而不是按计数排序?四分位数是基于弦的频率吗?为什么不直接使用 table()?
-
据我了解您的问题,它仅涉及原始数据框中的两列。请提供仅包含这两列以及产生结果所需的最小行数的示例数据。您说您希望以 21 列结束,但您的示例结果没有 21 列,这令人费解。你没有说 21 是从哪里来的。请解释一下。在一个示例中,如果您将问题更改为需要较小的数字(或仅当您使用
letters创建示例数据时才更大),那将是很好的。 -
这个问题有点难理解。会不会是您混淆了“列”和“行”这两个词? Operatie 有 21 个值;因此结果有 21*4 行对吗?
-
@Elin 希望现在更清楚一点,诀窍是转置一点。我希望创建一个包含所有文本值的单行(对于
Operatie的每个值)。 -
.. 包含所有 unique 文本值的计数。