【问题标题】:How do you combines columns using Tidyverse/Dplyr to create unique values for every repeated value?你如何使用 Tidyverse/Dplyr 组合列来为每个重复值创建唯一值?
【发布时间】:2020-12-27 21:36:36
【问题描述】:

我有一个数据框,它由两行组成,我想将它们合并为一行。其中一行包含 Days(测试参与者的不同日期),另一行包含 1-36 范围内的参与者编号(正在测试的个人)。在不同的日子有重复的参与者编号,所以我想创建一个变量,只要在不同的日子重复相同的数字,我就会创建一个新的、唯一的参与者编号。

例如,如果在第 1、2、3、4 和 5 天有一个参与者 1,我想创建一个列,将那些重复的参与者 1 变成可识别的参与者。

在下面的代码中,您可以看到第 1 天的数据框,再往下看,第 2 天的数据框有更多重复的参与者编号和唯一编号。总共有 5 天,每天 36 名参与者,所以最后我想让参与者 1-180 而不是 1-36 重复 5 次。

我还没有得到任何代码,因为我不知道如何以这种方式合并列。我只知道如何添加/减去值或连接列。

提前感谢您的帮助!

[此屏幕截图让您感受重复的数字,因为您可以看到不同的日子][1]

    X Day question_ID Expert participant_ID Sequence estimate Reaction.time.1 Personal.Confidence Reaction.time.2 Social.Information Social.Estimation
1   1   1        1      0         1        1             5.5e+01           7.925                   2           5.617          9.500e+01           8.5e+01
2   2   1        1      0         4        2             8.0e+01           7.020                   1           4.898          8.700e+01           8.4e+01
3   3   1        1      0         3        3             6.0e+01           7.223                   1           3.479          8.700e+01           6.7e+01
4   4   1        1      0         2        4             8.6e+01           4.602                   1           5.086          7.800e+01           8.5e+01
5   5   1        1      0         5        5             5.0e+01           5.319                   1           5.632          7.800e+01           5.1e+01
6   6   1        1      0         6        6             5.8e+01           5.367                   1           4.820          6.700e+01           6.7e+01
7   7   1        1      0         7        7             8.8e+01           8.907                   1           6.786          6.700e+01           8.2e+01
8   8   1        1      0        12        8             8.5e+01           9.219                   1           5.585          6.600e+01           6.7e+01
9   9   1        1      0         8        9             5.0e+01           8.019                   1           8.073          7.200e+01           6.0e+01
10 10   1        1      0         9       10             6.0e+01          13.182                   2           5.788          6.900e+01           7.2e+01
11 11   1        1      0        10       11             8.2e+01          10.343                   2           8.003          6.600e+01           7.8e+01
12 12   1        1      0        11       12             8.0e+01           8.690                   2           6.801          7.000e+01           7.8e+01
13 13   1        1      0        13       13             8.4e+01           6.988                   3           7.518          7.600e+01           7.8e+01
14 14   1        1      0        18       14             7.8e+01           4.431                   4           5.195          7.800e+01           7.8e+01
15 15   1        1      0        14       15             8.0e+01          10.920                   2           6.365          7.800e+01           8.0e+01
16 16   1        1      0        15       16             8.0e+01           7.254                   2           4.539          7.800e+01           8.5e+01
17 17   1        1      0        17       17             6.5e+01           7.395                   2           4.602          8.100e+01           7.5e+01
18 18   1        1      0        16       18             5.8e+01           7.660                   1           5.632          8.000e+01           8.0e+01
19 19   1        1      0        20       19             7.0e+01           6.271                   1           5.538          8.000e+01           7.5e+01
20 20   1        1      0        23       20             6.0e+01          12.449                   1           5.991          7.600e+01           8.0e+01
21 21   1        1      0        22       21             8.0e+01           7.410                   2           5.569          7.800e+01           8.0e+01
22 22   1        1      0        19       22             1.0e+02          12.511                   5           8.362          7.800e+01           7.6e+01
23 23   1        1      0        24       23             9.0e+01           9.765                   2           7.675          7.800e+01           8.0e+01
24 24   1        1      0        21       24             6.0e+01          12.106                   1           8.221          7.800e+01           7.9e+01
25 25   1        1      0        30       25             8.8e+01           6.692                   1           4.758          7.800e+01           8.0e+01
26 26   1        1      0        28       26             7.5e+01           9.111                   5           9.485          7.900e+01           7.5e+01
27 27   1        1      0        29       27             8.6e+01          12.932                   3           6.318          7.800e+01           7.9e+01
28 28   1        1      0        25       28             8.9e+01          10.717                   3           4.415          7.800e+01           9.2e+01
29 29   1        1      0        27       29             9.0e+01           7.551                   2           6.942          8.200e+01           9.0e+01
30 30   1        1      0        26       30             8.0e+01           6.443                   1           4.150          8.700e+01           7.3e+01
31 31   1        1      0        35       31             8.0e+01           7.612                   2           6.038          8.500e+01           8.2e+01
32 32   1        1      0        36       32             8.6e+01           6.818                   3           7.941          8.100e+01           8.5e+01
33 33   1        1      0        32       33             8.6e+01           6.318                   3           6.178          8.000e+01           7.6e+01
34 34   1        1      0        31       34             7.5e+01           7.082                   1           5.148          8.100e+01           7.6e+01
35 35   1        1      0        34       35             8.8e+01           8.096                   1           7.270          7.900e+01           8.2e+01
36 36   1        1      0        33       36             8.0e+01           6.474                   4           4.804          7.800e+01           8.0e+01```


  [1]: https://i.stack.imgur.com/HdVDw.png

【问题讨论】:

  • 您能否分享一个简短的示例并根据该示例显示预期的输出。您可以删除不相关的列,以便更容易理解您想要的内容。请参阅此帖子以了解如何分享可重现的示例 stackoverflow.com/questions/5963269
  • 如果你有dplyr 1.0.0 你可以试试df1 <- df %>% group_by(participant_ID, Day) %>% mutate(key = cur_group_id())
  • 欢迎来到 Stack Overflow。您能否编辑您的帖子以包含您的数据(删除不需要的列之后)。以下代码将生成一个包含 10 条随机记录的代码 sn-p,您可以将其粘贴到原始帖子中:dput(dplyr::sample_n(YourDatasetsNameGoesHere, 10))。要使用我的代码,您可能需要安装 dplyr:install.packages("dplyr")。增加 sn-p 中的样本量,直到您有几个人的一些观察结果。

标签: r dplyr tidyverse


【解决方案1】:

您可以使用dplyr 创建唯一代码。然后,您可以arrange 数据以按参与者代码的字母顺序对其进行排序,将其分组并使用row_number() 添加序列号。默认情况下,dplyr 函数unite 也会删除原始列,但您可以指定remove=FALSE 来保留它们:

require(dplyr)

df%>%
unite("participant.code", c("Day","participant_ID"), sep="_")%>%
group_by(participant.code)%>%
arrange(participant.code)%>%
mutate(participant.seq=row_number())

这将为所有参与者添加一个序列号,如果同一参与者一天出现两次,则分配相同的编号。另一种选择是完全跳过unite 代码行并指定group_by(Day,participant_ID)

【讨论】:

  • 感谢您的回答,非常感谢!虽然unite 函数正在合并这两列,但我留下了新的参与者号码,例如1_12_35,而不是新号码。例如,1_1(第 1 天参与者 1)将保留为参与者 1,但 2_35 将变为参与者 70。有没有办法做到这一点?
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2019-04-13
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多