簡體   English   中英

如何操作R中的重復行?

[英]How to manipulate duplicated rows in R?

我已經復制了一組數據,我想通過在“代碼”列下的復制行中添加“ A”並在原始行中添加“ a”來編輯復制的行。 下面的例子。

可重現的數據幀:

Date <- c("2016-01-02","2016-01-03","2016-01-04")
Data <- c("0",".2", ".1")
Code <- c("", "", "")
y <- data.frame(Date, Data, Code)
y<- y[rep(row.names(y),2),]
y$Date <- as.Date(y$Date, format='%Y-%m-%d')
y <- y[order(y$Date), ]

當前數據:

> y
        Date    Data    Code
1   2016-01-02    0     
1.1 2016-01-02    0     
2   2016-01-03   .2     
2.1 2016-01-03   .2     
3   2016-01-04   .1     
3.1 2016-01-04   .1 

期望的結果:

> y
      Date      Data     Code
1   2016-01-02    0       a
1.1 2016-01-02    0       A
2   2016-01-03   .2       a
2.1 2016-01-03   .2       A
3   2016-01-04   .1       a
3.1 2016-01-04   .1       A

如果第一次遇到行,則duplicated(y)將返回一個布爾型向量,其值為FALSE,如果duplicated(y)返回TRUE。 您可以如下使用它:

y$Code = ifelse(duplicated(y),"A","a")

輸出:

          Date Data         Code
1   2016-01-02    0            a
1.1 2016-01-02    0            A
2   2016-01-03   .2            a
2.1 2016-01-03   .2            A
3   2016-01-04   .1            a
3.1 2016-01-04   .1            A

無需事先在y <- data.frame(Date, Data, Code)創建該列,因此可能會變成: y <- data.frame(Date, Data)

或者你可以嘗試groupdplyr ,萬一你在每個時間超過兩個復制

y%>%group_by(Date)%>%dplyr::mutate(code=ifelse(row_number()==1,'a','A'))
#y%>%group_by(Date)%>%dplyr::mutate(code=ifelse(row_number()%%2==0,'A','a')) more than 2 
# A tibble: 6 x 4
# Groups:   Date [3]
        Date   Data   Code  code
      <date> <fctr> <fctr> <chr>
1 2016-01-02      0            a
2 2016-01-02      0            A
3 2016-01-03     .2            a
4 2016-01-03     .2            A
5 2016-01-04     .1            a
6 2016-01-04     .1            A

例如 :

y<- y[rep(row.names(y),3),]
y$Date <- as.Date(y$Date, format='%Y-%m-%d')
y <- y[order(y$Date), ]

y%>%group_by(Date)%>%dplyr::mutate(code=ifelse(row_number()%%2==0,'A','a')

    # A tibble: 9 x 4
# Groups:   Date [3]
        Date   Data   Code  code
      <date> <fctr> <fctr> <chr>
1 2016-01-02      0            a
2 2016-01-02      0            A
3 2016-01-02      0            a
4 2016-01-03     .2            a
5 2016-01-03     .2            A
6 2016-01-03     .2            a
7 2016-01-04     .1            a
8 2016-01-04     .1            A
9 2016-01-04     .1            a

具有索引的簡單R替代方案是

y$Code <- c("a", "A")[duplicated(y) + 1]

哪個返回

y
          Date Data Code
1   2016-01-02    0    a
1.1 2016-01-02    0    A
2   2016-01-03   .2    a
2.1 2016-01-03   .2    A
3   2016-01-04   .1    a
3.1 2016-01-04   .1    A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM