如何在r中以相同的id传播数据并合并到同一行

如何在r中以相同的id传播数据并合并到同一行,r,data-cleaning,R,Data Cleaning,我有一个类似这样的数据: Id Time Type location count no_activities id 1 2014/10/11 A level1 20 10 1 2 2014/10/11 B level1 20 10 2 3 2014/10/11 C level1 10 9 3 4 2014/10

我有一个类似这样的数据:

Id Time       Type location  count  no_activities      id 
1  2014/10/11  A   level1      20     10              1
2  2014/10/11  B   level1      20     10              2
3  2014/10/11  C   level1      10      9              3
4  2014/10/11  A   level2      5      12              4
5  2014/10/11  B   level2      6       5              5
6  2014/10/11  C   level2      7       8              6
7  2014/10/11  A   level3      7       8              7
8  2014/10/11  B   level3      9       5              8
9  2014/10/11  C   level3      20     23              9
...
...
     Time       Type location count  no_activities      id 
101  2014/11/27  A   level33     20     10              101
102  2014/11/27  B   level33     30     10              102
103  2014/11/27  C   level33     10      9              103
104  2014/11/27  A   level34     10     12              104
105  2014/11/27  B   level34     16      5              105
106  2014/11/27  C   level34     5       8              106
107  2014/11/27  A   level35     3       8              107
108  2014/11/27  B   level35     1       5              108
109  2014/11/27  C   level35     10     23              109
在按日期和位置对它们进行分组后,我希望将Type列展开,并根据时间和位置将相同组的计数合并到同一行中,如下所示:

Id Time        location     A  B  C 
1  2014/10/11   level1     20 20 10
4  2014/10/11   level2      5  6  7
7  2014/10/11   level3      7  9 20
10 2014/10/11   level4     ...
13 2014/10/11   level5     ...
16 2014/10/11   level6      
19 2014/10/11   level7         
22 2014/10/11   level8   
25 2014/10/11   level9      
... 

我读过一些类似的问题,但在这种情况下,似乎没有一个能解决我的问题。我尝试了以下代码:

df %>% dplyr::group_by(Time, location) %>% summarise_all(funs(toString(na.omit(.)))) 
它设法按日期和级别对观察结果进行分组,但将列中缺失的内容替换为NA,而不是合并 将相同时间和级别的行合并为一行:

Id  Time        location  count  no_activities id    A   B  C
1  2014/10/11   level1      20     10         1    20  NA NA
2  2014/10/11   level1      20     10         2    NA  20 NA
3  2014/10/11   level1      10      9         3    NA  NA 10
4  2014/10/11   level2      5      12         4     5  NA NA
5  2014/10/11   level2      6       5         5    NA   6 NA
6  2014/10/11   level2      7       8         6    NA  NA  7
7  2014/10/11   level3      7       8         7     7  NA NA  
8  2014/10/11   level3      9       5         8    NA   9 NA 
9  2014/10/11   level3     20      23         9    NA  NA 20
... 
我也试过了

df %>%  reshape(df, v.names= c("A", "B", "C"), idvar=Id, timevar ="Time", direction="wide")


他们都没有工作。感谢您的帮助。谢谢。

除了上面评论中的讨论,你是指这样的事情吗

df %>%
    group_by(Time, location) %>%
    select(Time, location, Type, count) %>%
    spread(Type, count) %>%
    ungroup()
## A tibble: 6 x 5
#  Time       location     A     B     C
#  <fct>      <fct>    <int> <int> <int>
#1 2014/10/11 level1      20    20    10
#2 2014/10/11 level2       5     6     7
#3 2014/10/11 level3       7     9    20
#4 2014/11/27 level33     20    30    10
#5 2014/11/27 level34     10    16     5
#6 2014/11/27 level35      3     1    10
样本数据
您好,很抱歉有一个输入错误-这些级别重复了,但它们应该是相同级别,a、B和C的计数不同。我已经更改了日期。@Mauritz我想我现在看到了问题;目标是获取类型变量的计数值,以绘制相关图。也许我可以删除其他列。你能告诉我如何在r中做到这一点吗?@Maurits很抱歉这有点混乱,但我认为两者都有:我必须按时间、地点对它们进行分组,在这种情况下,我每次、地点和类型都有一个观察结果,然后根据类型将它们组合成一行。这是我想要的,但不知何故,我仍然获得了与之前使用数据相同的输出:/@Harper我建议逐步阅读我给出的代码示例。这样你就可以清楚地看到每一步的作用。我已经包括了你提供的样本数据,所以这是完全可复制的。可能是因为您有不同的列名,所以您可能需要对较大的数据进行一些调整。我认为这是因为excel中的时间是以日期时间为单位的,而不仅仅是日期。谢谢你的帮助。我会设法解决的。
df %>%
    group_by(Time, location) %>%
    select(Time, location, Type, count) %>%
    spread(Type, count) %>%
    ungroup()
## A tibble: 6 x 5
#  Time       location     A     B     C
#  <fct>      <fct>    <int> <int> <int>
#1 2014/10/11 level1      20    20    10
#2 2014/10/11 level2       5     6     7
#3 2014/10/11 level3       7     9    20
#4 2014/11/27 level33     20    30    10
#5 2014/11/27 level34     10    16     5
#6 2014/11/27 level35      3     1    10
df <- read.table(text =
"Id Time       Type location  count  no_activities      id
1  '2014/10/11'  A   level1      20     10              1
2  '2014/10/11'  B   level1      20     10              2
3  '2014/10/11'  C   level1      10      9              3
4  '2014/10/11'  A   level2      5      12              4
5  '2014/10/11'  B   level2      6       5              5
6  '2014/10/11'  C   level2      7       8              6
7  '2014/10/11'  A   level3      7       8              7
8  '2014/10/11'  B   level3      9       5              8
9  '2014/10/11'  C   level3      20     23              9
101  '2014/11/27'  A   level33     20     10              101
102  '2014/11/27'  B   level33     30     10              102
103  '2014/11/27'  C   level33     10      9              103
104  '2014/11/27'  A   level34     10     12              104
105  '2014/11/27'  B   level34     16      5              105
106  '2014/11/27'  C   level34     5       8              106
107  '2014/11/27'  A   level35     3       8              107
108  '2014/11/27'  B   level35     1       5              108
109  '2014/11/27'  C   level35     10     23              109", header = T)