r - 按名称合并多对列

标签 r function loops coalesce

我不知道该如何解决这个问题:

我有癌症治疗测量数据框,我想使用合并()成对“合并”。但框架包含 100 多列,所以我想使用某种函数或循环。

这是我的数据框的样子

dataframe

我有一个带有治疗名称的向量:药物 <- c(A、C、B、D 等)

这些列代表药物治疗的多次测量。我想将列成对合并:A_1 + A_2 到 A(新列)、B_1 等

此代码有效:df <- df %>% mutate(A = coalesce(A_1, A_2)。

但是框架有 100 多列,所以我想使用某种函数或循环,使用带有药物名称的向量的值。 每种药物都有 2 列,但它们的顺序不正确,所以我不能使用编号,我必须使用列的名称。但是当我将其放入函数中时它不起作用

一个补充:我希望将结果列(A、B、C)等添加到框架中。

我应该如何进行?

谢谢!!

最佳答案

这里是 split.default 的一个选项 - 根据列名称模式将数据拆分为数据 block ,然后通过循环 来使用 coalesce列表

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))

关于r - 按名称合并多对列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72500806/

相关文章:

jQuery:如何使用循环创建数组

r - 您知道一种更优雅的方法来计算前几天的事件数量吗?

R:计算百分位数困难吗?

r - 如何按组跨行获得重复的平均值

php - 向数组中的图像添加时间戳

javascript - 刷新时有时无法加载页面

Matlab:使用 fplot 绘制多个匿名函数

java - 获取给定开始和结束日期的日期列表

r - 结合 texreg、knitr、booktabs 和 dcolumn

java - 如何将java的for循环变成递归?