【问题标题】:Create a new data frame column based on the values of two other columns根据其他两列的值创建一个新的数据框列
【发布时间】:2015-03-04 09:22:05
【问题描述】:

假设我有两个变量和 213005 个观察值的数据框,它看起来像这样:

df <- data.frame(nr=c(233, 233, 232, 231, 234, 234, 205), 
        date=c("2012/01/02", "2012/01/01", "2012/01/01", "2012/01/02", "2012/01/01", "2012/01/01", "2012/01/05"))

我需要根据“日期”值为每个不同的“nr”值创建一个名为“new”的新列,它应该如下所示:

df <- data.frame(nr=c(233, 233, 232, 231, 234, 234, 205), 
        date=c("2012/01/02", "2012/01/01", "2012/01/01", "2012/01/02", 
                  "2012/01/01", "2012/01/01", "2012/01/05"), 
        new=c(1, 2, 3, 4, 5, 5, 6))

(nr=233,日期=2012/01/02)=>(新=1)

(nr=233, date=2012/01/01) => (new=2) ...

对于 (nr=234, date=2012/01/01) 应该有两个相同的列,new=5,重复的行应该留在数据框中。

有人知道怎么做吗?任何帮助将不胜感激! 谢谢!

【问题讨论】:

  • @Nemo 链接的“骗子”与这个问题无关。
  • @Nemo 可能的重复项是stackoverflow.com/questions/13018696/…,但链接中的问题又是针对 data.table 的,所以我不知道是否可以将其作为重复项关闭
  • @akrun 你选择关闭它与否,我只是搜索和学习 :-) 感谢你在这里提供的惊人帮助 akrun :-)
  • @Nemo 没问题。如果我们得到更好的链接,我会保持打开状态

标签: r dataframe


【解决方案1】:

我不完全确定我理解逻辑,但您似乎想按两列分组,这是一个使用 .GRP 的简单 data.table 解决方案

library(data.table)
setDT(df)[, new := .GRP, .(nr, date)][]
#     nr       date new
# 1: 233 2012/01/02   1
# 2: 233 2012/01/01   2
# 3: 232 2012/01/01   3
# 4: 231 2012/01/02   4
# 5: 234 2012/01/01   5
# 6: 234 2012/01/01   5
# 7: 205 2012/01/05   6

【讨论】:

  • 感谢您的帮助。是的,我想按两列分组。我正在尝试按照你说的做,但我得到了一个 error: Type of RHS ('integer') must match LHS ('double')... 在我的数据框中 nrintegerdatefactor 也许这就是问题所在?
  • 删除您手动创建的new 列,并在您的数据中没有该列时运行此代码。或者,您可以只创建另一列并将其命名为 new2,例如。
  • @David Arenburg 很有趣,你总是在自己复制时说复制。 stackoverflow.com/questions/28841552/…
【解决方案2】:

使用base R

 v1 <- do.call(paste, df)
 df$new <- as.numeric(factor(v1, levels=unique(v1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2017-01-03
    • 1970-01-01
    • 2022-07-05
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多