我在R中有以下数据框,我想安排并生成序列列
.vue
我希望按bay row tier flag
43 11 88 NA
43 11 90 NA
43 11 86 NA
43 9 88 NA
43 9 92 NA
13 4 88 89
13 4 90 NA
13 4 94 NA
11 4 88 89
11 7 90 NA
tier
列
数据框应该看起来像
bay and row
然后我想为这个排列的数据帧生成一个序列
bay row tier flag
43 11 90 NA
43 11 88 NA
43 11 86 NA
43 9 92 NA
43 9 88 NA
13 4 94 NA
13 4 90 NA
13 4 88 89
11 7 90 NA
11 4 88 89
我在生成seq时要检查的唯一事情是 bay row tier flag seq
43 11 90 NA 1
43 11 88 NA 2
43 11 86 NA 3
43 9 92 NA 4
43 9 88 NA 5
13 4 94 NA 6
13 4 90 NA 7
13 4 88 89 8
11 7 90 NA 9
11 4 88 89 8
重复时我希望两行保持相同flag
,否则sequence number
值不同的数字
NA
采用bay,row and tier
格式
答案 0 :(得分:2)
我们可以使用data.table
。转换' data.frame'到' data.table' (setDT(df1)
),order
' bay',' row'和'等级'按降序排列,然后创建一个序列栏' seq',得到索引所在的标记'是重复的,不是NA
,然后将i
指定为逻辑索引,并按'标记'分组。我们改变了seq'到了' seq'
library(data.table)
df2 <- setDT(df1)[order(-bay, -row, -tier)][, seq := seq_len(.N)]
i1 <- df2[, (duplicated(flag)|duplicated(flag, fromLast = TRUE)) & !is.na(flag)]
df2[i1, seq := seq[1L], .(flag)]
df2
# bay row tier flag seq
# 1: 43 11 90 NA 1
# 2: 43 11 88 NA 2
# 3: 43 11 86 NA 3
# 4: 43 9 92 NA 4
# 5: 43 9 88 NA 5
# 6: 13 4 94 NA 6
# 7: 13 4 90 NA 7
# 8: 13 4 88 89 8
# 9: 11 7 90 NA 9
#10: 11 4 88 89 8