【问题标题】:Easier way of turning duplicates into blank entries in a dataframe in R将重复项转换为 R 中数据框中的空白条目的更简单方法
【发布时间】:2016-04-08 03:49:40
【问题描述】:

我有一个数据框,df:

ID <- c('ID1','ID1','ID2','ID3','ID3','ID3','ID4')
hr <- c(10,20,10,15,20,10,15)
DD <- c('DD1','DD2','DD3','DD4','DD5','DD6','DD7')
ddhr <- c(15,20,30,20,10,15,10)
df <- data.frame(ID,hr,DD,ddhr)
df
   ID hr  DD ddhr
1 ID1 10 DD1   15
2 ID1 20 DD2   20
3 ID2 10 DD3   30
4 ID3 15 DD4   20
5 ID3 20 DD5   10
6 ID3 10 DD6   15
7 ID4 15 DD7   10

此数据框按df$ID排序。

我想更改此数据框,以便每次出现重复的 df$ID 条目时,该重复条目和相应的 df$hr 条目都将转换为空白条目 ("")。

理想的结果数据框如下所示:

   ID hr  DD ddhr
1 ID1 10 DD1   15
2        DD2   20
3 ID2 10 DD3   30
4 ID3 15 DD4   20
5        DD5   10
6        DD6   15
7 ID4 15 DD7   10

这样做的最佳方法是什么?我试过了:

df$ID=as.character(df$ID)
df$ID=ifelse(!duplicated(df$ID)==FALSE,"",df$ID)
df$hr=ifelse(df$ID=="","",df$hr)

但这似乎有点冗长,特别是如果我有多个额外的列想要空白(除了 hr)。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以尝试以下方法。请注意,字符列(IDDD)是字符类型,而不是因子。

    df[duplicated(df$ID),1:2] <- ""
    df
       ID hr  DD ddhr
    1 ID1 10 DD1   15
    2        DD2   20
    3 ID2 10 DD3   30
    4 ID3 15 DD4   20
    5        DD5   10
    6        DD6   15
    7 ID4 15 DD7   10
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 1970-01-01
      • 2016-11-19
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2020-07-17
      相关资源
      最近更新 更多