【发布时间】:2019-09-09 05:03:09
【问题描述】:
我有一个数据是这样的:
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" 列并将同一组(基于时间和位置)的"count" 合并到同一行中,如下所示:
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) %>%
spread(Type, count)
他们都没有工作。任何帮助表示赞赏。谢谢。
【问题讨论】:
-
您好,很抱歉打错了 - 级别重复了,但它们应该是相同的级别,A、B 和 C 的计数不同。而且我已经更改了日期。
-
@Mauritz 我想我现在看到了问题;目标是获取
Type变量的count值以绘制相关图。也许我可以删除其他列。您能否告诉我如何在 r 中做到这一点? -
@Maurits 抱歉,这有点令人困惑,但我认为两者兼而有之:我必须按 (
Time,location) 对它们进行分组,在这种情况下,我每个Time都有一个观察结果、location和Type,然后根据Type组合成一行。
标签: r data-cleaning