如何操作R中的重复行?

如何操作R中的重复行?,r,dataframe,duplicates,R,Dataframe,Duplicates,我复制了一组数据,我想通过在“Code”列下的复制行和原始行中分别添加“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 <

我复制了一组数据,我想通过在“Code”列下的复制行和原始行中分别添加“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
期望的结果:

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的布尔向量,如果行重复,则返回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中创建列,或者您可以尝试从
dplyr
中创建
group
,以防在每个日期有两个以上的重复项

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%>%group\u by(Date)%>%dplyr::mutate(code=ifelse(row\u number()=1,'a','a'))
#y%%>%group_by(日期)%%>%dplyr::mutate(代码=ifelse(行号()%%2==0,'A','A'))超过2
#一个tibble:6x4
#分组:日期[3]
日期数据代码
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

y一个简单的带索引的base R替代方法是

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

谢谢这很好用!我还想尝试对数据列执行相同的操作。。。其中原始值为零,但复制值为值。但是当我尝试
y$Data时,它似乎不起作用,然后您可以在运行我的语句之前将
y[order(y$Data==0,discreating=TRUE),]
。这样,所有的零将在顶部,并将被视为原始。无需担心,我明白了!y$数据很好,您能够自己解决问题,很高兴我能提供帮助。