我有一个很棒的DF。 第一列被命名为“ID”,除了我有列“天”。 我在ID中有超过4000个不同的值重复自己,在“天”栏中,我的值从-60到60.我的问题是并非所有ID值都在-60到60之间的所有值,并且我需要任何ID值的整个范围都是“天”(-60到60)。
DF <- data.frame(ID=c(1,2,3...4000), days=c(-60,-59,-58....60),...)
我需要用“ID”值缺少值来填充“days”列。
对不起,如果我不够清楚。
非常感谢!
这是我的DF
的一个例子Data.frame': 8 obs. of 8 variables:
$ Farm : Factor w/ 7 levels "Abel","Bollant",..: 1 1 1 1 1 1 1 1
$ ID : int 10000 10000 10000 10000 10000 10000 10000 10000
$ Date : Factor w/ 395 levels "1/1/2015","1/10/2015",..: 63 89 85 66 64 77 65 36
$ Rum : int 622 619 706 455 563 594 589 681
$ Act : int 438 484 466 449 471 546 449 424
$ FDAT : Factor w/ 304 levels "1/1/2015","1/10/2015",..: 46 46 46 46 46 46 46 46
$ daystocalv: int -10 -15 -12 -21 -19 -31 -20 9
$ Prepartum : int 1 1 1 1 1 1 1 0
答案 0 :(得分:1)
当您花时间创建一个小问题示例时,您可以向他人展示您的努力。我们强调这有三个原因:1)它可以帮助其他人理解你的问题; 2)它允许每个人自己尝试代码来制定解决方案,3)很多时候你会在创建示例时找到答案。
示例:
df <- data.frame(x=rep(LETTERS[1:3], c(2,3,5)), y=c(-2,0,-1,0,1, -2,-1,0,1,2), stringsAsFactors=F)
df
# x y
# 1 A -2
# 2 A 0
# 3 B -1
# 4 B 0
# 5 B 1
# 6 C -2
# 7 C -1
# 8 C 0
# 9 C 1
# 10 C 2
此示例采用三个ID,范围从-2到2. ID&#34; C&#34;已完成但其他人没有所有值。创建它只需要20秒,但它可以极大地帮助实现问题的可视化。
解决方案:
complete
通过查看群组并进行扩展来填补任何缺失值:
library(tidyr)
complete(df, x, y)
# Source: local data frame [15 x 2]
#
# x y
# (chr) (dbl)
# 1 A -2
# 2 A -1
# 3 A 0
# 4 A 1
# 5 A 2
# 6 B -2
# 7 B -1
# 8 B 0
# 9 B 1
# 10 B 2
# 11 C -2
# 12 C -1
# 13 C 0
# 14 C 1
# 15 C 2