r data.table-将空白分配给重复值(按组)

问题描述 投票:0回答:1

我正在尝试使用data.table按组(a,b,c)将重复值空白。我在下面尝试过,但仅适用于变量。我当时在考虑使用tail()或head(),但那没有用。

df$E[duplicated(df$E)] <- ""

输入表

a,b,c
=====
1,1,1
1,1,2
1,2,1
1,2,2
1,3,1
1,3,2
2,1,1
2,1,2
2,2,1
2,2,2
2,3,1
2,3,2

输出表

a,b,c
=====
1,1,1
 , ,2
 ,2,1
 , ,2
 ,3,1
 , ,2
2,1,1
 , ,2
 ,2,1
 , ,2
 ,3,1
 , ,2
r data.table
1个回答
0
投票
library(data.table)
df <- tibble::tribble(
  ~a,~b,~c,
  1,1,1,
  1,1,2,
  1,2,1,
  1,2,2,
  1,3,1,
  1,3,2,
  2,1,1,
  2,1,2,
  2,2,1,
  2,2,2,
  2,3,1,
  2,3,2

         ) %>% as.data.table()

df[,dupa:=rleid(a)][,rowid :=seq_len(.N) ,by=dupa][,a:=ifelse(rowid>1,NA,a)][,c("dupa","rowid"):=.(NULL,NULL)]
df[,dupb:=rleid(b)][,rowid :=seq_len(.N) ,by=dupb][,b:=ifelse(rowid>1,NA,b)][,c("dupb","rowid"):=.(NULL,NULL)]
df[,dupc:=rleid(c)][,rowid :=seq_len(.N) ,by=dupc][,b:=ifelse(rowid>1,NA,c)][,c("dupc","rowid"):=.(NULL,NULL)]
df
     a  b c
 1:  1  1 1
 2: NA NA 2
 3: NA  2 1
 4: NA NA 2
 5: NA  3 1
 6: NA NA 2
 7:  2  1 1
 8: NA NA 2
 9: NA  2 1
10: NA NA 2
11: NA  3 1
12: NA NA 2
© www.soinside.com 2019 - 2024. All rights reserved.