这是我的第一篇帖子,而且我对R还比较陌生,所以如果我写得不好,很抱歉.

我在其他任何地方都没有发现这个问题,但最初的方法与下面描述的方法有些类似:

How to mutate several columns by column index rather than column name using across?.

我有一个包含时间序列数据的数据框,我想要从一系列连续列中删除特定列.在下面的示例中,1R中的值将从列1A、1B和1C中删除.同样,2R中的值将从2A、2B和2C中删除.

所以像这样的数据帧


t | 1A | 1B| 1C|1RMV| 2A | 2B| 2C|2RMV| 
- | - -|- -|- -| - -| - -|- -|- -|- - | 
1 | 1  | 4 | 7 | 3  | 1  | 4 | 7 | 1  |   . . . . . . .
2 | 2  | 5 | 8 | 2  | 2  | 5 | 8 | 2  |
3 | 3  | 6 | 9 | 1  | 3  | 6 | 9 | 3  |

会变成这样

t | 1A | 1B| 1C|1RMV| 2A | 2B| 2C|2RMV| 
 -| - -|- -|- -| - -| - -|- -|- -|- - | 
1 | -2 | 1 | 4 | 3  | 0  | 3 | 6 | 1  |   . . . . . . .
2 | 0  | 3 | 6 | 2  | 0  | 3 | 6 | 2  |
3 | 2  | 5 | 8 | 1  | 0  | 3 | 6 | 3  |

我之前已经‘手动’地执行了这个操作,它运行得很好,然而,自从试图使这个过程更自动化以来,我遇到了一些问题.

由于每组(1A、1B、1C,而2A、2B、2C、2D、2E等)中的列数不同,我最初创建了一个列表,其中包含我想要从其他列中减go 的所有列的索引位置,如下所示:

#Return TRUE only for columns to be removed
df_boolean <- str_ends(colnames(df), "RMV")


#Create a 1D vector with elements of index positions of columns to be removed in Data
col_number <- ncol(Intensity_Raw_Data)
remove_indices <- c()
for(i in 1:col_number){
  if(df_boolean[i] == TRUE){
    remove_indices <- c(background_indices, i)
  }
} 


然后,我使用cross from dplyr执行减法,如下所示:


group_number <- length(remove_indices)


#Calculate subtraction for first group, probably way to do it in one loop but first column is the time column and I'm lazy

df_Subtracted <- df %>%
mutate(across(2:(remove_indices[1] - 1), ~.  - df[(remove_indices[1])]))

#Calculate subtracction for remaining groups
for(i in 2:group_number){
  df_Subtracted <- df_Subtracted %>%
  mutate(across((remove_indices[i-1] + 1):(remove_indices[i] - 1), ~.x - df[(remove_indices[i])]))

在这里我遇到了我的问题,当手动运行此程序时(即手动在cross()中键入列名),列名保持不变.但是,当我使用上面的代码运行它时,列名被重命名为:

1A$1R 1B$1R 1C$1R.-不,不,不-不,不,不-不,不,不2A$2R 2B$2R 2C$2R 2D$2R.-不,不,不-不,不,不-不,不,不-不,不,不-不,不,不

虽然使用str()显示View()中的输出看起来是正确的,但结果显示输出中的每一列(Df_Subtracted)实际上是一个1变量数据框.

我不确定是什么原因导致了这种情况的发生,但我认为这可能与我如何对要删除的列进行索引有关.如有任何帮助,我们将不胜感激!

**

- UPDATE

**

我略微修改了GuedesBF anwser,使用了Akrun in this post中使用的方法,为除以列名的数据创建了一个通用的anwser.


df_subtracted_split <- df %>%
  split.default(sub('\\d+', '', names(df))) %>%
  lapply(function(x) {names(x)[ncol(x)] <- "RMV";x}) %>%
  map(~mutate(.x, across(1:last_col(1), ~.x - RMV))) 
 
 
df_subtracted <- do.call(qpcR:::cbind.na, Data_Final)

For some reason list_rbind/list_cbind resulted in dropping off
columns, I read here that it is probably a result of some groups in my data frame having missing rows, thus I used cbind.na from qpcR instead.

感谢GuedesBF和Peter861222!

推荐答案

如果我们将数据帧split.default()分成一组相似的数据帧,执行必要的操作,最后将列表bind回一个数据帧,这会变得更容易.

library(dplyr)
library(readr)
library(purrr)

df %>%
    select(-t) %>% 
    split.default(parse_number(names(.)) %>%
    map(~mutate(.x, across(c(2A, 2B, 2C), \(x) x - cur_data[[4]])) %>%
    list_rbind()

R相关问答推荐

在边界外添加注释或标题

更改Heatmap Annotation对象的名称

以R中的正确顺序将日期时间字符列转换为posixct

次级y轴R gggplot2

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

如何计算R数据集中每个女性的子元素数量?

如何使用按钮切换轨迹?

当两个图层映射到相同的美学时,隐藏一个图层的图例值

用预测NLS处理R中生物学假设之上的误差传播

在R中,如何在每个堆叠的条上放置误差条,特别是当使用facet_grid时?

如何在Chart_Series()中更改轴值的 colored颜色 ?

在ggplot中为不同几何体使用不同的 colored颜色 比例

将饼图插入条形图

通过在colname中查找其相应值来创建列

在使用tidyModels和XGBoost的二进制分类机器学习任务中,所有模型都失败

如何根据数据帧中的值从该数据帧中提取值?

TreeNode打印 twig 并为其上色

优化从每个面的栅格中提取值

多元正态分布的计算

如何移动点以使它们的打印不重叠