根据R中的因子,从时间序列中创建等长矢量

时间:2016-12-09 04:51:52

标签: r

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

time type count
1   -2    a     1
2   -1    a     4
3    0    a     6
4    1    a     2
5    2    a     5
6    0    b     3
7    1    b     7
8    2    b     2

我想创建一个采用类型'b'的新数据框,并通过填入零来创建全时序列。它应该是这样的:

time type count
1   -2    b     0
2   -1    b     0
3    0    b     3
4    1    b     7
5    2    b     2

我当然可以用子集(df,df $ type ='b')然后破解开头和rbind,但我希望它在动态变化时更具动态性。

2 个答案:

答案 0 :(得分:1)

我们可以使用complete中的tidyr来获取'type'的所有唯一值的完整'时间'和'type'中感兴趣的值filter

library(tidyr)
library(dplyr)
val <- "b"
df1 %>% 
    complete(time, type, fill=list(count=0)) %>%
    filter(type== val)
#   time  type count
#  <int> <chr> <dbl>
#1    -2     b     0
#2    -1     b     0
#3     0     b     3
#4     1     b     7
#5     2     b     2

答案 1 :(得分:0)

以基地R:

df1 <- data.frame(time=df[df$type == 'a',]$time, type='b', count=0)
df1[match(df[df$type=='b',]$time, df1$time),]$count <- df[df$type=='b',]$count 

df1
    time type count
1   -2    b     0
2   -1    b     0
3    0    b     3
4    1    b     7
5    2    b     2