【问题标题】:Dynamically updating a data frame from a subset in R从 R 中的子集动态更新数据框
【发布时间】:2013-11-19 12:27:40
【问题描述】:

所以,这就是我想做的事情:

df <- data.frame(a=1:6, b=1:6)
ss <- magicSubset(df, a <= 3)

ss$b <- 100

df$b # should be c(100,100,100,4,5,6)

在 R 或包中是否有类似的东西?我想实施起来不会太难……有什么理由是个坏主意吗?

【问题讨论】:

  • 你能解释一下你为什么需要这个吗?也许还有另一种选择可以最终实现您想要的。
  • 如果您可以选择切换到 data.table 而不是 data.frame,除非明确要求,否则 data.table 通常不会执行复制 --> EXAMPLE
  • 理由如下:我正在创建一个框架,用户必须定期更新数据库中的单个特定行,在他们自己定义的函数中。如果我可以将该行“传递”给函数,那么他们编写obj$field &lt;- value 会比编写objects$field[objects$id==obj$id] &lt;- value 容易得多。我去看看data.table,大概就是这样吧!
  • 我看了data.table,它非常接近,但没有香蕉......我想。如果dt 是一个data.table,那么dt2 &lt;- dt 将通过引用进行复制。但是dt2 &lt;- dt[1:3,] 创建了一个单独的副本。还是我在某处缺少功能? data.table 文档很难阅读...

标签: r dataframe subset


【解决方案1】:

您可以对df$b 进行子集化并为其赋值:

df$b[df$a <= 3] <- 100

【讨论】:

  • 我明白了,但我想创建一个可以传递的对象,并在更新时更新其“父级”。
  • @David R 复制所有内容,没有一种简单的方法可以使用 R 变量获得类似指针的行为,就像在 Python 中那样。
  • @David 也就是说,听起来 S4 或 Reference 类可能会提供更多传统的面向对象框架来满足您的目的。
  • 我在想类似的事情。当我不得不编写像df$foo[some_complicated_condition] &lt;- df$foo[some_complicated_condition] + df$bar[some_complicated_condition] 这样的代码时,我感到很沮丧。只是想知道是否有人打败了我。
  • 当我有 some_complicated_condition 时,我首先定义它 (keep &lt;- some_complicated_condition),然后将数据框子集化 (df$foo[keep] &lt;- df$foo[keep] + df$bar[keep])。它没有达到你的要求,但对我来说更清楚,写起来更短。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2018-11-24
  • 1970-01-01
  • 2017-07-31
  • 2021-10-20
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多