簡體   English   中英

R-測試值是否與上方單元格中的值相同

[英]R - Test if value is the same as the one in the cell above

我有以下df:

name   color
A      red 
B      red
C      green
D      red
E      red
F      red

我想測試“顏色”列中的值,看它們是否與上一行中的值相同,然后寫入新列...我可以使用以下方法進行操作:

> df$same <- ifelse(df$color == df$color[c(NA,1:(nrow(df)-1))], 1, 0)

給我:

name   color  same
A      red      NA
B      red       1
C      green     0
D      red       0
E      red       1
F      red       1

但是,有沒有更清潔的方法呢? (我經常用這個)...

您可以嘗試使用dplyr軟件包中的lag功能。 您可以使用上面一行的值創建一個新列,然后將它們進行比較,

> dt$color_above <- lag(dt$color, n=1)

> dt   

  name color color_above
1    A   red        <NA>
2    B   red         red
3    C green         red
4    D   red       green
5    E   red         red
6    F   red         red

或者直接解決問題,您可以使用magrittr軟件包中的管道操作magrittr 它仍然很冗長,但是我認為它使代碼更清晰。

> dt %$%  
    { color == lag(color, n=1) } %>% 
    as.numeric() %>% 
    {.} -> dt$same

> dt

  name color same
1    A   red   NA
2    B   red    1
3    C green    0
4    D   red    0
5    E   red    1
6    F   red    1

添加到Rafael的答案中,可以將ifelsedplyr::mutate

> dt <- data_frame(name = c('A', 'B', 'C', 'D', 'E', 'F'), color = c('red', 'red', 'green', 'red', 'red', 'red'))
> dt
# A tibble: 6 x 2
   name color
  <chr> <chr>
1     A   red
2     B   red
3     C green
4     D   red
5     E   red
6     F   red
> dt %>% mutate(same = ifelse(color == lag(color), 1, 0))
# A tibble: 6 x 3
   name color  same
  <chr> <chr> <dbl>
1     A   red    NA
2     B   red     1
3     C green     0
4     D   red     0
5     E   red     1
6     F   red     1

暫無
暫無

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

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