[英]Mutate tibble conditionally based on prefixes
我正在嘗試根據以下條件改變 tibble:
一個可重現的例子是:
tibble(a = c(1, 1, 0, 0, 1),
a.1 = c(0, 0, 1, 0, 1),
a.2 = c(0, 0, 0, 1, 0),
b = c(0, 0, 0, 0, 1),
b.1 = c(0, 0, 0, 1, 0),
b.2 = c(0, 0, 0, 0, 0))
# A tibble: 5 × 6
a a.1 a.2 b b.1 b.2
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0 0 0 0 0
2 1 0 0 0 0 0
3 0 1 0 0 0 0
4 0 0 1 0 1 0
5 1 1 0 1 0 0
最終結果應如下所示:
tibble(
a.1 = c(1, 0, 1, 0, 1),
a.2 = c(1, 0, 0, 1, 0),
b.1 = c(0, 0, 0, 1, 1),
b.2 = c(0, 0, 0, 0,
1))
# A tibble: 5 × 4
a.1 a.2 b.1 b.2
<dbl> <dbl> <dbl> <dbl>
1 1 1 0 0
2 0 0 0 0
3 1 0 0 0
4 0 1 1 0
5 1 0 1 1
我的真實數據中每個前綴都沒有固定數量的變量。 因此,我試圖寫一個通用的 function。
如果有人能幫助我,我將不勝感激:)
split.default
+ map_dfc
的解決方案:
tbl %>%
split.default(gsub("\\..*", "", colnames(.))) %>%
map_dfc(~ {.x[.x[1] == 1 & rowSums(.x[-1]) == 0, ] <- 1
.x[-1]})
output
# A tibble: 5 × 4
a.1 a.2 b.1 b.2
<dbl> <dbl> <dbl> <dbl>
1 1 1 0 0
2 1 1 0 0
3 1 0 0 0
4 0 1 1 0
5 1 0 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.