【发布时间】: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
-
如果你有
dplyr1.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 中的样本量,直到您有几个人的一些观察结果。