我正在使用国家/地区数据集,在不同的时间点具有不同的值。每个月只有一次观察,因此我使用了as.date功能,例如日期为01-07-2018、01-08-2018等。 对于每个国家和每个日期都有一个对应的值。 我想将其转换为一个数据框,其中所有国家/地区的值都在某个日期汇总。 我已经尝试过重塑功能,
reshape(Origin_wide, idvar = "Origin", timevar = "V5", direction = "wide")
V5是日期变量,而Origin是国家。 据我所知,这删除了as.date集合,因此日期和相应的值不再被这样处理。 可以更顺利地完成吗?数据序列的时间序列方面使重新整形功能丢失,因此我无法更改时间序列或按日期绘制等。 此外,日期获得了“值”前缀,据我所知这是同样的问题。
以下是数据结构:
| V5 | Origin | Value |
|---------------------|------------------|----------|
| 01-09-2017 | USA | 45 |
|---------------------|------------------|----------|
| 01-10-2017 | USA | 47 |
|---------------------|------------------|----------|
| 01-11-2017 | USA | 49 |
|---------------------|------------------|----------|
| 01-09-2017 | Canada | 7 |
|---------------------|------------------|----------|
| 01-10-2017 | Canada | 13 |
|---------------------|------------------|----------|
| 01-11-2017 | Canada | 17 |
|---------------------|------------------|----------|
这就是我想要的样子:
| V5 | Canada | USA |
|---------------------|------------------|----------|
| 01-09-2017 | 7 | 45 |
|---------------------|------------------|----------|
| 01-10-2017 | 13 | 47 |
|---------------------|------------------|----------|
| 01-11-2017 | 17 | 49 |
|---------------------|------------------|----------|
希望这是有道理的。 再现数据的随机小版本:
set.seed(1)
Data <- data.frame(Value = sample(1:10), Origin = sample(c("Mexico", "USA","Canada"), 10, replace = TRUE))
dates <- sample(seq(as.Date('2018/01/01'), as.Date('2018/05/01'), by="month"), 10, replace = TRUE)
Data <- cbind(dates,Data)
A look on the data as produced by the code
很显然,这里没有为所有日期定义值。在这种情况下,该日期的值=0。因此,在我进行重塑的第一次尝试中,它为所有没有观测值的日期生成了NA,这是完美的,因为我能够只输入0。
答案 0 :(得分:0)
library(tidyverse)
tbl <- tibble(
V5 = rep(c("01-09-2017", "01-10-2017", "01-11-2017"), 2),
Origin = rep(c("USA", "Canada"), each = 3),
Value = c(45, 47, 49, 7, 13, 17)
)
tbl %>%
spread(Origin, Value)
# A tibble: 3 x 3
V5 Canada USA
<chr> <dbl> <dbl>
1 01-09-2017 7 45
2 01-10-2017 13 47
3 01-11-2017 17 49
我不确定用NA
代替0
是个好主意,因为那些确实是缺失值,而不是0
的值。但是,如果您确实想这样做,则可以执行以下操作:
result <- tbl %>%
spread(Origin, Value)
result[is.na(result)] <- 0
注意:您的玩具示例是随机的,并不代表您实际数据的模式。在其上运行代码将输出一个非常难看的宽格式。创建玩具示例时,请尝试确保它能反映真实数据的特征。