根据其他两列的值创建新的数据框列

3

假设我有一个数据框,其中包含两个变量和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, date=2012/01/02) => (new=1)

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

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

有人知道如何做到这一点吗?任何帮助都将不胜感激!谢谢!


可能是如何使用R索引主题的重复问题。 - user1267127
@Nemo,链接中的“重复问题”与这个问题无关。 - David Arenburg
@Nemo 可能是重复的一个链接是 https://dev59.com/Mmcs5IYBdhLWcg3wPxge 但是再次提到链接中的问题有点特定于data.table,因此我不知道是否可以将其关闭为重复。 - akrun
@akrun 关于关闭它的选择,由你决定,我只是在搜索和学习 :-) 感谢你在这里提供的惊人帮助,akrun :-) - user1267127
1
@Nemo 没问题。我会保持开放,以防我们得到更好的链接。 - akrun
2个回答

4

我不是完全确定我理解逻辑,但是看起来你想按两列进行分组,以下是一个简单的data.table方案,使用.GRP实现。

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

谢谢你的帮助。是的,我想按两列分组。我正在尝试按照你说的做,但是我得到了一个“错误:RHS('integer')的类型必须匹配LHS('double')”...在我的数据框中,“nr”是“integer”,而“date”是“factor”,也许这就是问题所在? - Miglė Papuškaitė
删除您手动创建的 new 列,并在您的数据中没有该列时运行此代码。或者,您可以只创建另一个列并将其命名为 new2 例如。 - David Arenburg
@David Arenburg,你总是说别人重复,而你自己也在重复。http://stackoverflow.com/questions/28841552/how-to-index-subjects-using-r/28841703#28841703 - user1267127

1
使用基本的R。
 v1 <- do.call(paste, df)
 df$new <- as.numeric(factor(v1, levels=unique(v1)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接