r - 在 R 中,寻找一种更有效的方法来计算列中的最大值与同一列中的所有值之间的差异
问题描述
使用 R,我试图找到一种更有效的方法来计算列中的最大值与同一列中的每个值之间的差异。我能够做到这一点,但是代码看起来很庞大(我创建了一个向量,其中每个值都是列的最大值),我希望有人可以演示一种更有效的方法,也许使用 apply 命令?
a<-data.frame("Group Name"=c('Group 1','Group 2', 'Group 3', 'Group 4','Group 5', 'Group 6'),
"app 1"=c(28,28,27,28,29,28),
"app 2"=c(32,31,29,33,35,32),
"app 3"=c(44,43,42,45,46,44),
"app 4"=c(48,48,47,48,49,48),
"app 5"=c(38,36,35,39,41,38),
"app 6"=c(26,26,25,26,27,26))
a$Avg_score=apply(a[,-1],1,mean)
a$max_mean_diff<-c(max(a$Avg_score),max(a$Avg_score),max(a$Avg_score),
max(a$Avg_score),max(a$Avg_score),max(a$Avg_score))-a$Avg_score
View(a)
解决方案
你不需要apply
在这里,因为你有rowMeans
返回每一行平均值的函数。然后你可以Avg_score
用max
of减去Avg_score
。您不需要重复max(a$Avg_score)
使长度等于a$Avg_score
,R 使用回收技术来匹配较短对象的长度与较长对象的长度。
a$Avg_score <- rowMeans(a[-1], na.rm = TRUE)
a$max_diff <- max(a$Avg_score) - a$Avg_score
a
# Group.Name app.1 app.2 app.3 app.4 app.5 app.6 Avg_score max_diff
#1 Group 1 28 32 44 48 38 26 36.00000 1.833333
#2 Group 2 28 31 43 48 36 26 35.33333 2.500000
#3 Group 3 27 29 42 47 35 25 34.16667 3.666667
#4 Group 4 28 33 45 48 39 26 36.50000 1.333333
#5 Group 5 29 35 46 49 41 27 37.83333 0.000000
#6 Group 6 28 32 44 48 38 26 36.00000 1.833333
推荐阅读
- sql - 如何使用 SUBQUERIES 找到每个部门的最高薪水
- awk - 对于字段中的每个唯一出现,转换不同列中另一个字段中的每个唯一出现
- python - Python - 我可以将票分配给具有 2 个列表的员工吗?
- angular - 带有授权标头的 Websocket 连接
- python - 如何在下拉菜单中设置if条件
- java - 来自@Value注解的Spring Boot实例化变量
- google-sheets - Google 表格 - 将所有打开的(状态)任务与类别和任务描述过滤到摘要选项卡中
- python - 在 Python 中线程化一个类
- django - 利用 Django url 解析器与重新发明 request.path 解析轮
- javascript - 将 Json 转换为 JS 对象