【问题标题】:Iterating across rows in a dataframe and reading values遍历数据框中的行并读取值
【发布时间】:2020-04-13 02:31:31
【问题描述】:

我有 r 数据框 df1

    $ date            <date> 2005-01-01, 2005-01-01
    $ realtime_period <date> 2005-04-28, 2006-02-28
    $ GDP             <dbl> 12182.7, 12198.8

还有另一个 r 数据帧 d2

    $ ID                     <dbl> 65, 99, 411, 420, 421, 426, 428, 429, 431, 433, 446, 448, 456, 463, 472, 483, 484, 497, 498, 502, 504, 5...
    $ forecast               <dbl> 12113.86, 12224.00, 12126.00, 12138.00, 12110.60, 12166.76, 12149.40, 12151.10, 12155.73, 12142.60, 1213...

我想读取df1中的每一行并在df2中添加一个对应的列,并将对应的值包含在df2的“GDP”列中

df2[paste(as.character(df1$realtime_period), "-", df2$GDP)] <- df1$GDP
$ ID                     <dbl> 65, 99, 411, 420, 421, 426, 428, 429, 431, 433, 446, 448, 456, 463, 472, 483, 484, 497, 498, 502, 504, 5...
$ forecast               <dbl> 12113.86, 12224.00, 12126.00, 12138.00, 12110.60, 12166.76, 12149.40, 12151.10, 12155.73, 12142.60, 1213...
$ `2005-04-28 - 12182.7` <dbl> 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198...
$ `2006-02-28 - 12198.8` <dbl> 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12198.8, 12182...

但是价值观是混在一起的。例如,2005-04-28 - 12182.7 列中的所有值都应为 12182.7,但每隔一个值与下一列中的相应值混淆

预期结果如下

$ ID                     <dbl> 65, 99, 411, 420, 421, 426, 428, 429, 431, 433, 446, 448, 456, 463, 472, 483, 484, 497, 498, 502, 504, 5...
$ forecast               <dbl> 12113.86, 12224.00, 12126.00, 12138.00, 12110.60, 12166.76, 12149.40, 12151.10, 12155.73, 12142.60, 1213...
$ `2005-04-28 - 12182.7` <dbl> 12182.7, 12198.8, 12182.7, 12198.8, 12182.7, 12182.7, 12182.7, 12182.7, 12182.7, 12182.7, 12182.7, 12182...
$ `2006-02-28 - 12198.8` <dbl> 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198.8, 12198...

我该如何解决这个问题?

【问题讨论】:

  • 您能否使用dput 共享数据并显示相同的预期输出?阅读如何提供reproducible example
  • @RonakShah 我添加了预期的结果。我只想读取 df1 上的相应值并在 df2 上的相应列中的所有行中列出相同的值
  • 你被矢量回收利用了。您需要它,因为您需要为每一行重复每个值,但现在它正在重复整个向量,而不是单独重复每个值。下面的 Ronak 解决方案将向量分成两部分,因此回收是分开进行的。如果这没有意义,请简化您的方法并一次分配一列。

标签: r


【解决方案1】:

你可以试试:

df2[paste(df1$realtime_period, df1$GDP, sep = "-")] <- as.list(df1$GDP)

【讨论】:

  • 这行得通,但是我还想在同一行代码上对这些值进行进一步的计算。我希望每个值最终以 (df2$forecast-df1$GDP)^2 的结果结束,其中 df2$forecast 是 df2 中每一行的相应值。我不确定如果我们使用 as.list() 是否可行
  • df1df2 的行数是否相同?在这种情况下,您可以执行df2[paste(df1$realtime_period, df1$GDP, sep = "-")] &lt;- as.list((df2$forecast-df1$GDP)^2) BTW,如果您分享一个可重现的示例,则更容易提供帮助。一个可重现的示例是当您以我们可以复制粘贴到我们的 R 会话并使用它的方式共享数据时。通常通过dputdput(df1)dput(df2) 完成。查看str 的数据并没有真正的帮助。
  • No df1 和 df2 的行数不相等。我使用 as.list() 函数实现了最初的目标,然后进行了计算。
  • 我不明白,但我很高兴你能解决它。
猜你喜欢
  • 2019-12-15
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
相关资源
最近更新 更多