我有一个类似这样的数据框:
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,但我希望它在动态变化时更具动态性。
答案 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