[英]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的答案中,可以將ifelse
與dplyr::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.