我想从数据集中前3列的每个值中减go 每个"空白"列的平均值,该数据集看起来像这样:

df <- data.frame(da=1:5, d2=6:10, dd=2:6, 
                blank...1=c(0.1, 0.1, 0.4, 0.2, 0.1), d5=2:6, dg=7:11, 
                di=3:7, blank...2=c(0.2, 0.2, 0.4, 0.1, 0.1), dm=21:25, 
                h4=5:9, d7=26:30, blank...3=c(0.1, 0.3, 0.4, 0.4, 0.1))

df
#   da d2 dd blank...1 d5 dg di blank...2 dm h4 d7 blank...3
# 1  1  6  2       0.1  2  7  3       0.2 21  5 26       0.1
# 2  2  7  3       0.1  3  8  4       0.2 22  6 27       0.3
# 3  3  8  4       0.4  4  9  5       0.4 23  7 28       0.4
# 4  4  9  5       0.2  5 10  6       0.1 24  8 29       0.4
# 5  5 10  6       0.1  6 11  7       0.1 25  9 30       0.1

换句话说,我想将第dad2dd列的每个值减go blank...1的平均值;然后将第d5dgdi列的每个值减go blank...2的平均值等等.实际数据集实际上有15个空白需要从前11列中减go .

我已经使用colMeans生成了一个vector中所有"空白"列的平均值,但我不知道如何编写该函数来指示哪个值用于哪些列.

如何通过功能实现这一点?

推荐答案

这是受jpsmith启发的另一种Base R方法:

blanks = grep("blank", names(df))   # find the blank columns
blank_means = colMeans(df[blanks])  # get their means

## subtract blanks means from the non-blank columns
## this relies on having exactly 3 non-blank columns per blank column
df[-blanks] = Map("-", df[-blanks], rep(blank_means, each = 3))
df
#     da   d2   dd blank...1  d5   dg  di blank...2    dm   h4    d7 blank...3
# 1 0.82 5.82 1.82       0.1 1.8  6.8 2.8       0.2 20.74 4.74 25.74       0.1
# 2 1.82 6.82 2.82       0.1 2.8  7.8 3.8       0.2 21.74 5.74 26.74       0.3
# 3 2.82 7.82 3.82       0.4 3.8  8.8 4.8       0.4 22.74 6.74 27.74       0.4
# 4 3.82 8.82 4.82       0.2 4.8  9.8 5.8       0.1 23.74 7.74 28.74       0.4
# 5 4.82 9.82 5.82       0.1 5.8 10.8 6.8       0.1 24.74 8.74 29.74       0.1

R相关问答推荐

Select 与特定列中最大值对应的数据帧行

R:如何自动化变量创建过程,其中我需要基于ifelse()为现有变量的每个级别创建一个单独的变量

有没有方法将琴弦完全捕捉到R中的多边形?

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

更改Heatmap Annotation对象的名称

在R中查找每个组不同时间段的总天数

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

无法正确设置动态创建的Quarto标注的格式

R Read.table函数无法对制表符分隔的数据正常工作

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

如何计算R glm probit中的线性预测因子?

如何在R中使用hmm TMB提前一步预测观察到的状态?

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

创建在文本字符串中发现两个不同关键字的实例的数据框

将数据从一列转换为按组累计计数的单个虚拟变量

具有自定义仓位限制和计数的GGPLATE直方图

如何用不同长度的向量填充列表?

Ggplot2:添加更多特定 colored颜色 的线条

在一个multiplot中以非对称的方式在R中绘制多个图

为什么R列名称忽略具有指定名称的向量,而只关注索引?