根据另外两列的值创建一个新的数据框列

时间:2015-03-04 09:22:06

标签: r dataframe

我们说我的数据框有两个变量和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"))

我需要创建一个名为&#34; new&#34;的新列。对于每个不同的&#34; nr&#34;价值根据&#34;日期&#34;价值,它应该是这样的:

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)=&gt; (新= 1)

(nr = 233,date = 2012/01/01)=&gt; (新= 2)...

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

有谁知道怎么做?任何帮助将非常感谢! 谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用base R

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