Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在r中创建基于其他列自动递增的列_R - Fatal编程技术网

在r中创建基于其他列自动递增的列

在r中创建基于其他列自动递增的列,r,R,我的数据框包含客户ID、产品和日期。我需要创建一个列,在每次customerID或日期更改时生成事务id 我的数据帧当前看起来像: CustomerID产品--日期 23---------abv--------12-12-14 23-----------------gfs-------12-14 18-------gra-------12-12-14 52-------我们-----14-12-14 23-------qwe------16-12-14 我需要使用r填充transactionID

我的数据框包含客户ID、产品和日期。我需要创建一个列,在每次customerID或日期更改时生成事务id

我的数据帧当前看起来像:

  • CustomerID产品--日期
  • 23---------abv--------12-12-14
  • 23-----------------gfs-------12-14
  • 18-------gra-------12-12-14
  • 52-------我们-----14-12-14
  • 23-------qwe------16-12-14
  • 我需要使用r填充transactionID列

  • CustomerID产品--日期------事务ID
  • 23--------abv-----12-12-14---1
  • 23---------gfs---------12-12-14---1
  • 18---------gra------12-12-14----2
  • 52----我们----14-12-14----3
  • 23----qwe----16-12-14----4
  • 我有一个csv文件中的数据。我无法在excel中创建此列,因为文件太大,excel无法打开整个文件


    谢谢你的帮助

    假设列
    CustomerID
    date
    已排序

    indx <- as.character(interaction(df[c(1,3)]))
    df$transactionID <- cumsum(c(TRUE,indx[-1]!=indx[-length(indx)]))
    df$transactionID
    #[1] 1 1 2 3 4
    

    数据
    df根据您对我的评论的回复,您可能还对“data.table”中的
    .GRP
    感兴趣:

    库(data.table)
    ##以防行发生故障
    
    我们还需要了解其他规则吗?“日期”列是否已排序?如果第7行中有
    CustomerID==23
    date==12-12-14
    的情况,这是另一个交易ID还是1?谢谢!customerID==23和date==12-12-14组合不会再次出现在第7行或更高版本中。很好的选择。如果我们知道OP想要什么就更好了:-)+1@AnandaMahto谢谢,我认为无论排序与否,
    match
    factor
    都应该有效。我以前从你那里学过这种索引。但是,这是额外的信息+1:)@jazzurro,也许可以开始合作?我相信你已经知道这一点,但是已经有很多优秀的R作者活跃在这里了;我关心的是内容的重新整理。@AnandaMahto你只是让我意识到一些重要的事情(例如,Gitbook)。我错过了一件大事。我的耻辱。当您创建
    SOfun
    时,许多伟大的R用户都知道人们在这里会问什么。今天早些时候,有一个问题得到了5-6个答案。我在回答中使用了你的
    getanID
    。如果我们能确定一些常见的主题,如子集问题、字符串等,并使用各种软件包编译可能的解决方案,那将是一个很棒的文档。我从您的回答中学到了
    .GRP
    。非常感谢。我想知道
    []
    到底做什么?我运行了有和没有它的代码,但我看到了相同的结果。这是为什么?@jazzurro,这是我们很久以前通过电子邮件讨论的问题。根据您使用的“data.table”的版本,在使用
    :=
    时可能看不到输出,除非您显式调用
    []
    (这将打印输出)。请参阅1.9.5版自述文件的第二部分,第2点。啊,没错!我在想什么???再次感谢你。是的,我需要查看结果。
    indx1 <- c(indx, indx[1])
    as.numeric(factor(indx1, levels=unique(indx1)))
    #[1] 1 1 2 3 4 1
    
    match(indx1, unique(indx1))
    #[1] 1 1 2 3 4 1
    
    df <- structure(list(CustomerID = c(23L, 23L, 18L, 52L, 23L), Product =
    c("abv", "gfs", "gra", "wer", "qwe"), date = c("12-12-14", "12-12-14", 
    "12-12-14", "14-12-14", "16-12-14")), .Names = c("CustomerID", 
    "Product", "date"), class = "data.frame", row.names = c(NA, -5L))
    
    library(data.table)
    ## In case rows get out of order
    DT <- as.data.table(df, keep.rownames = TRUE) 
    DT[, transactionID := .GRP, by = list(CustomerID, date)][]
       rn CustomerID Product     date transactionID
    1:  1         23     abv 12-12-14             1
    2:  2         23     gfs 12-12-14             1
    3:  3         18     gra 12-12-14             2
    4:  4         52     wer 14-12-14             3
    5:  5         23     qwe 16-12-14             4