我不知道應該如何解決這個問題:
我有來自癌癥治療的測量資料框,我想使用 coalesce() 成對“合并”。但是框架包含 100 多列,所以我想使用某種函式或回圈。
這是我的資料框的樣子
資料框
我有一個帶有治療名稱的向量:drugs <- c(A, C, B, D etc)
這些列代表藥物治療的多次測量。我想成對合并列:A_1 A_2 到 A(新列)、B_1 等
此代碼有效: df <- df %>% mutate(A = coalesce(A_1, A_2).
但是框架有 100 多列,所以我想使用某種函式或回圈,使用帶有藥物名稱的向量中的值。每種藥物都有 2 列,但它們的順序不正確,所以我不能使用編號,我必須使用列的名稱。但是當我把它放到一個函式中它不起作用
一個補充:我想將結果列(A,B,C)等添加到框架中。
我應該如何進行?
謝謝!!
uj5u.com熱心網友回復:
更新了后綴_ViMIC和_EtMIC:
library(tidyverse)
old_df <- tribble(
~A_EtMIC, ~B_EtMIC, ~C_EtMIC, ~A_ViMIC, ~C_ViMIC, ~B_ViMIC,
1, NA, 2, 1, 0, 6,
5, 5, NA, 2, 1, NA,
NA, 3, NA, 3, 3, 7,
1, 6, 3, 4, 2, NA,
10, 8, 5, 5, NA, NA
)
new_df <- old_df |>
mutate(row = row_number()) |>
pivot_longer(-row, names_to = c("prefix", "suffix"),
names_pattern = "(.*)_(..MIC)") |>
pivot_wider(names_from = suffix,
values_from = value) |>
mutate(coalesced = coalesce(EtMIC, ViMIC)) |>
select(- ends_with("MIC")) |>
pivot_wider(names_from = prefix, values_from = coalesced,
names_glue = "{prefix}_MIC")
both_df <- bind_cols(new_df, old_df)
both_df
#> # A tibble: 5 × 10
#> row A_MIC B_MIC C_MIC A_EtMIC B_EtMIC C_EtMIC A_ViMIC C_ViMIC B_ViMIC
#> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 6 2 1 NA 2 1 0 6
#> 2 2 5 5 1 5 5 NA 2 1 NA
#> 3 3 3 3 3 NA 3 NA 3 3 7
#> 4 4 1 6 3 1 6 3 4 2 NA
#> 5 5 10 8 5 10 8 5 5 NA NA
由reprex 包(v2.0.1)創建于 2022-06-05
uj5u.com熱心網友回復:
這是一個選項split.default- 根據列名模式將資料拆分為資料塊,然后coalesce通過回圈使用list
library(dplyr)
library(stringr)
library(purrr)
df1 %>%
split.default(str_remove(names(.), "\\d $")) %>%
map_dfc(~ exec(coalesce, !!!.x))
-輸出
# A tibble: 5 × 3
A B C
<dbl> <dbl> <dbl>
1 1 6 2
2 5 5 1
3 3 3 3
4 1 6 3
5 10 8 5
資料
df1 <- structure(list(A1 = c(1, 5, NA, 1, 10), B1 = c(NA, 5, 3, 6, 8
), C1 = c(2, NA, NA, 3, 5), A2 = c(1, 2, 3, 4, 5), C2 = c(0,
1, 3, 2, NA), B2 = c(6, NA, 7, NA, NA)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -5L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487559.html
上一篇:Odin專案的任務是使函式“大寫”,我不知道我的答案是否好?
下一篇:Python將多個函式合二為一
