【问题标题】:Create new sequential column if value in another column is non-unique如果另一列中的值不唯一,则创建新的顺序列
【发布时间】:2022-06-14 11:07:39
【问题描述】:

我有两列 xy,如果其中一列中的值不唯一,我正在尝试创建一个新的序列列 z。例如

x <- c("1", "1", "1", "1", "2", "2", "2", "3", "3", "3", "4", "4", "5", "6", "6", "6")
y <- c("Y", "Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "N", "Y", "Y")
df <- data.frame(x, y) 

我想要得到的是以下内容:

#    x     y         z
#
#    1     Y         1
#    1     Y         2
#    1     Y         3
#    1     Y         4
#    2     N         1
#    2     N         2
#    2     Y         3
#    3     Y         1
#    3     Y         2
#    3     Y         3
#    4     Y         1
#    4     Y         2
#    5     Y         1
#    6     N         1
#    6     Y         2
#    6     Y         3

【问题讨论】:

  • 试试ave(df$x, df$x, FUN = seq_along)
  • 这能回答你的问题吗? Running count based on field in R
  • 不,这个问题是不同的。达伦谢谢你,我会将你的答案作为接受的答案。
  • 我能够用我链接的最佳答案解决您的问题。
  • @QHarr 是的,我明白你的意思,我猜你的第一行链接没有排序,因此我不明白,但达伦对我来说更有意义。谢谢

标签: r


【解决方案1】:
y <- c("Y", "Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "N", "Y", "Y")
df <- data.frame(x, y) 

df$z <- ave(df$x, df$x, FUN = seq_along)

给予

   x y z
1  1 Y 1
2  1 Y 2
3  1 Y 3
4  1 Y 4
5  2 N 1
6  2 N 2
7  2 Y 3
8  3 Y 1
9  3 Y 2
10 3 Y 3
11 4 Y 1
12 4 Y 2
13 5 Y 1
14 6 N 1
15 6 Y 2
16 6 Y 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多