如何根据其他列中的值向列添加行

时间:2016-03-17 13:15:21

标签: r database add

我有一个很棒的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

1 个答案:

答案 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