【问题标题】:Special group number for each combination of data每个数据组合的特殊组号
【发布时间】:2018-02-21 18:21:49
【问题描述】:

我想为每对行分配不同的组号。并且对于某些将唯一编号分配为组编号的对。

编辑

我们可以认为这些在数据中是成对存在的。如果这些对存在于行中,则为它们分配一个组号,直到下一对。因为真实数据中可能还有其他数据行。

这是示例数据

 names <- c(c("bad","good"),c("good","bad"),c("bad","J.James"),c("Good","J.James"),c("J.James","Good"),c('Veni',"vidi","Vici"))

  df <- data.frame(names)

      names
1      bad
2     good
3     good
4      bad
5      bad
6  J.James
7     Good
8  J.James
9  J.James
10    Good
11    Veni
12    vidi
13    Vici

当我集中每一对时,例如 c("bad","good") 想对它们进行分组,并为 c('Veni',"vidi","Vici") 分配唯一编号 666

所以预期的输出

     names Group
1      bad     1
2     good     1
3     good     2
4      bad     2
5      bad     3
6  J.James     3
7     Good     4
8  J.James     4
9  J.James     5
10    Good     5
11    Veni     666
12    vidi     666
13    Vici     666

感谢您的帮助。

在评论者的建议下,我还发布了more complicated case as a new question

【问题讨论】:

    标签: r dplyr aggregate


    【解决方案1】:

    您可以尝试以下方法:

    x <- c('Veni',"vidi","Vici")
    library(data.table)
    setDT(df)[, Group := ((sequence(nrow(df))-1) %/% 2)+1][names %in% x, Group := 666][]
    #       names Group
    #  1:     bad     1
    #  2:    good     1
    #  3:    good     2
    #  4:     bad     2
    #  5:     bad     3
    #  6: J.James     3
    #  7:    Good     4
    #  8: J.James     4
    #  9: J.James     5
    # 10:    Good     5
    # 11:    Veni   666
    # 12:    vidi   666
    # 13:    Vici   666
    

    【讨论】:

    • 而解决方案是你的一般?例如,如果 c(bad,good,1,2,3) 后面还有其他行怎么办。
    • @Alexander Re dplyr:df %&gt;% mutate(g = ((sequence(nrow(df))-1) %/% 2)+1, g = replace(g, names %in% x, 666))。关于“怎么办”——你应该提供一个涵盖你关心的案例的例子,也许是一个新问题......
    • 我不得不说,如果你想完成这项任务,你应该事先考虑将数据放入列表中,而不是使用data.frame()data.table()。尽管 Franks 和 A5 的答案(很好),但列表看起来是一种更好的解决方法。
    • @Alexander,我认为你必须举一个例子来说明你所说的“一般”是什么意思。
    • @Frank 请看第二个编辑部分。我解释了'what about'部分。
    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多