r:按名称附加列子集的平均值

Posted

技术标签:

【中文标题】r:按名称附加列子集的平均值【英文标题】:r: append mean of a subset of columns by name 【发布时间】:2016-12-14 05:07:12 【问题描述】:

我有这个 df:

          webvisits1   webvisits2  webvisits3 webvisits4
s001          2            0           11           2
s002          11           2           23           3
s003          12           1            1           5
s004          13           5            5           0
s005          4            3            9           3

我需要创建一个输出数据框,其中添加了包含 webvisits(3-4) 和 webvisits (1-2) 平均值之间差异的列,如下所示:

          webvisits1   webvisits2  webvisits3 webvisits4 difference_mean
s001          2            0           11           2        -5.5
s002          11           2           23           3        -6.5
s003          12           1            1           5         3.5
s004          13           5            5           0         6.5
s005          4            3            9           3        -2.5

考虑到列名(网络访问)很重要,有没有一种简单的方法可以做到这一点? 谢谢

【问题讨论】:

【参考方案1】:

我们将数据集分为两部分(df[1:2]df[3:4]),获取差异,然后使用rowMeans,我们找到mean,使用transform 创建一个新列“differenceMean”。

df <- transform(df, differenceMean = rowMeans(df[1:2]- df[3:4]))
df 
#     webvisits1 webvisits2 webvisits3 webvisits4 differenceMean
#s001          2          0         11          2           -5.5
#s002         11          2         23          3           -6.5
#s003         12          1          1          5            3.5
#s004         13          5          5          0            6.5
#s005          4          3          9          3           -2.5

【讨论】:

【参考方案2】:

rowSums 函数可以对每个变量的行求和,然后找到现有变量之间的差异并取它们的平均值

library(dplyr)
 dt %>%
  mutate(difference_mean = (rowSums(dt[,2:3])-rowSums(dt[,4:5]))/2)

s.no webvisits1 webvisits2 webvisits3 webvisits4 difference_mean
1 s001          2          0         11          2            -5.5
2 s002         11          2         23          3            -6.5
3 s003         12          1          1          5             3.5
4 s004         13          5          5          0             6.5
5 s005          4          3          9          3            -2.5

【讨论】:

以上是关于r:按名称附加列子集的平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何按名称选择列的子集来计算 R 中的行均值? [复制]

R语言 平均值,中位数和模式

r 按列其他列分组的列子集的data.table操作

计算列子集上的行均值

使用 dplyr 按 R 中的组比较平均值(ANOVA)

绘制数据集的均值,其中每列是不同的一天