我有一个这样的 Dataframe (这是一个示例 Dataframe ):
id_row Sample wsts (xc) wstm (xc) wst1 (xc)
1 Na 2427.5 4542.5 2930
2 Na 1294.5 3642.5 1297
3 Ca 3048 5127.5 3456
4 Ca 2340 1729.5 2437
5 blank 2568.5 2529.5 2540
6 blank 2345 2001 2521
7 blank 2323 2121 2590
8 blank 2112.5 2129 2561
我正在尝试对我的数据应用特定的标准化方法。这是主要的想法。
第一:计算同一列中所有空格的平均值,例如第5行到第8行为空格。所以对于列wsts (xc)
,我需要计算该列上这些空白值的平均值。然后对列wstm (xc)
和wst1 xc
执行相同的操作。(在本例中,我更喜欢不指定所有列名,因为我的真实的数据框中有100个)。
其次,在计算每列的空白平均值之后,我需要从不同于空白的值中减去该列的空白平均值,如Na
或Ca
。举例来说:
id_row | Sample | wsts (xc) | wstm (xc) | wst1 (xc) |
1 | Na | 2427.5-(average of blank in that column) | 4542.5-(...) | 2930-(...) |
2 | Na | 1294.5-(average...) | ...
第三,当计算新值时,我想用结果创建一个新列,并将旧列(理想情况下)保留在旧列旁边。下面是一个例子(其中:old name (xc)_norm
是规范化新列的名称),
id_row | Sample | wsts (xc) | wsts (xc)_norm | wstm (xc) | wstm (xc)_norm | wst1 (xc) | wst1 (xc)_norm |
1 | Na | 2427.5 | new_value | 4542.5 | new_value | 2930 | new_value | ...
我认为要实现这个目标,我需要在R中创建一个函数,到目前为止,我还不知道如何做到这一点而不会卡住。
另一种选择是使用Excel,这更简单,因为我可以在一个单元格中设置一个函数并将其应用于其他行,但是,我不想这样做。
有什么想法可以实现我的目标吗?
R中有没有什么函数可以让我实现我的目标?
我需要创建一个函数吗?
1条答案
按热度按时间krcsximq1#
下面是一种使用
dplyr
和across()
来指定列的方法。它在选择需要转换的列方面非常灵活--这里我已经将该函数应用于所有名称中包含“xc”的列,但您可以列出它们,使用其他模式等。使用此示例数据: