我有一个数据框,其序列在'col1'中,值在'col2'中:
col1 col2 2 0.02 5 0.12 9 0.91 13 1.13
我想用1到13的常规序列扩展'col1'中的不规则序列.对于原始数据中缺少的'col1'中的值,我希望'col2' 0
在最终输出中得到值:
col1 col2 1 0 2 0.02 3 0 4 0 5 0.12 6 0 7 0 8 0 9 0.91 10 0 11 0 12 0 13 1.13
我怎么能在R中这样做?
只是为了完整性,使用自我二进制连接data.table
(你将得到NA
s而不是零,但如果需要可以很容易地改变)
library(data.table) setDT(df)[.(seq(max(col1))), on = .(col1)] # col1 col2 # 1: 1 NA # 2: 2 0.02 # 3: 3 NA # 4: 4 NA # 5: 5 0.12 # 6: 6 NA # 7: 7 NA # 8: 8 NA # 9: 9 0.91 # 10: 10 NA # 11: 11 NA # 12: 12 NA # 13: 13 1.13
library(tidyr) complete(d, col1 = 1:13, fill = list(col2 = 0))
要么
complete(d, col1 = seq(max(col1))), fill = list(col2 = 0))
# A tibble: 13 × 2 col1 col21 1 0.00 2 2 0.02 3 3 0.00 4 4 0.00 5 5 0.12 6 6 0.00 7 7 0.00 8 8 0.00 9 9 0.91 10 10 0.00 11 11 0.00 12 12 0.00 13 13 1.13
要么
library(dplyr) left_join(data.frame(col1 = seq(max(d$col1)))), d)
但这将留下NA
s而不是零.