【问题标题】:How to add rows to a column based on values in other column如何根据其他列中的值向列添加行
【发布时间】:2016-03-17 13:15:21
【问题描述】:

我有一个很大的 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”值的缺失值填充“天”列。

对不起,如果我不够清楚。

非常感谢!

这是我的 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

【问题讨论】:

    标签: r database add


    【解决方案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
    

    此示例采用范围从 -2 到 2 的三个 id。ID“C”是完整的,但其他的不具有所有值。创建只需要 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
    

    【讨论】:

    • 感谢您的帮助。我正在尝试使用 expand (tiplyr)。展开(df,嵌套(df$x),df$y)。然后现在我有每个 ID 的所有天数(即 x=ID,y=days)。我创建了一个向量,现在我想将原始 df 与向量合并,但是我运行在内存中,所以我不能。我的想法是扩展(嵌套)df 的所有变量而不是合并。如何嵌套df的所有变量?
    • 您是否混淆了dplyrtidyr?据我所知,没有名为 tiplyr 的包或函数
    • 对不起,很整洁
    • 你没有接受我的建议。请花 5 分钟时间为您的数据创建一个小示例,这样您就不必用语言解释所有内容。你明白我为什么要你举个例子吗?
    • 试试这个,输入dput(head(df))并将结果发布到您的问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2022-08-13
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多