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:按名称附加列子集的平均值的主要内容,如果未能解决你的问题,请参考以下文章