我正在嘗試使用dplyr.
以下是資料示例:
id colours tagl TAGLFT grid
<fct> <chr> <chr> <chr> <chr>
6391 B*/Y* 45820 45820 KL
6391 B*/Y* 45820 46272 KL
8443 B*/Y* 46272 46272 SU
我能夠使用此代碼成功地在行內替換:
updated<-df %>%
mutate(tagl=ifelse(!tagl==TAGLFT, TAGLFT, tagl))
我查找任何行,tagl==TAGLFT然后用tagl值替換TAGLFT值。然后,如果該條件為真(即發生了替換),我還需id要用正確的列替換該列id(這些值位于不同的行中)。
這是我想要的:
id colours tagl TAGLFT grid
<fct> <chr> <chr> <chr> <chr>
6391 B*/Y* 45820 45820 KL
8443 B*/Y* 46272 46272 KL
8443 B*/Y* 46272 46272 SU
關于如何跨行作業的任何建議?我主要在dplyr.
uj5u.com熱心網友回復:
這個怎么樣:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
dat <- tibble::tribble(~id, ~colours, ~tagl, ~TAGLFT, ~grid,
"6391", "B*/Y*", "45820", "45820", "KL",
"6391", "B*/Y*", "45820", "46272", "KL",
"8443", "B*/Y*", "46272", "46272", "SU")
updated<-dat %>%
mutate(tagl=ifelse(!tagl==TAGLFT, TAGLFT, tagl))
dat %>%
filter(tagl == TAGLFT) %>%
select(TAGLFT, id) %>%
right_join(updated %>% select(-id)) %>%
select(id, colours, tagl, TAGLFT, grid)
#> Joining, by = "TAGLFT"
#> # A tibble: 3 × 5
#> id colours tagl TAGLFT grid
#> <chr> <chr> <chr> <chr> <chr>
#> 1 6391 B*/Y* 45820 45820 KL
#> 2 8443 B*/Y* 46272 46272 KL
#> 3 8443 B*/Y* 46272 46272 SU
由reprex 包創建于 2022-04-05 (v2.0.1)
它適用于這個特定的實體,您需要確保它適用于您為實際應用程式擁有的完整資料配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457697.html
上一篇:將重復的if陳述句轉換為回圈
