首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据列值计算平均值

根据列值计算平均值
EN

Stack Overflow用户
提问于 2019-03-22 04:04:12
回答 1查看 72关注 0票数 2

我有一个数据集,它有一个变量ColumnStart,用于标识要计算平均值的第一列。我还有第二个变量ColumnEnd,用于标识该计算中的最后一列。对于第一行,我想计算从第5列到第9列的平均值。从第6列到第11列的第二行,依此类推。

输出将为:

以下是R的更新后的dput:

代码语言:javascript
复制
structure(list(ID = c("AAA", "BBB", "CCC", "DDD"), ShortID = c("452L", 
"3L", "4L", "324L"), Name = c("PS1", "PS2", "PS3", "PS4"), Route = 
c("Internal", 
"External", "Internal", "Internal"), ColumnStart = c(7L, 7L, 
9L, 8L), ColumnEnd = c(9L, 11L, 13L, 10L), Date1 = c(1L, 5L, 
13L, 4L), Date2 = c(2L, 6L, 45L, 3L), Date3 = c(3L, 7L, 23L, 
2L), Date4 = c(4L, 8L, 65L, 1L), Date5 = c(5L, 8L, 34L, 3L), 
Date6 = c(6L, 9L, 23L, 5L), Date7 = c(7L, 6L, 54L, 6L), Date8 = c(7L, 
6L, 1L, 7L), Date9 = c(8L, 9L, 3L, 8L)), .Names = c("ID", 
"ShortID", "Name", "Route", "ColumnStart", "ColumnEnd", "Date1", 
"Date2", "Date3", "Date4", "Date5", "Date6", "Date7", "Date8", 
"Date9"), row.names = c(NA, -4L), class = c("tbl_df", "tbl", 
"data.frame"), spec = structure(list(cols = structure(list(ID = 
structure(list(), class = c("collector_character", 
"collector")), ShortID = structure(list(), class = 
c("collector_character", 
"collector")), Name = structure(list(), class = c("collector_character", 
"collector")), Route = structure(list(), class = c("collector_character", 
"collector")), ColumnStart = structure(list(), class = 
c("collector_integer", 
"collector")), ColumnEnd = structure(list(), class = 
c("collector_integer", 
"collector")), Date1 = structure(list(), class = c("collector_integer", 
"collector")), Date2 = structure(list(), class = c("collector_integer", 
"collector")), Date3 = structure(list(), class = c("collector_integer", 
"collector")), Date4 = structure(list(), class = c("collector_integer", 
"collector")), Date5 = structure(list(), class = c("collector_integer", 
"collector")), Date6 = structure(list(), class = c("collector_integer", 
"collector")), Date7 = structure(list(), class = c("collector_integer", 
"collector")), Date8 = structure(list(), class = c("collector_integer", 
"collector")), Date9 = structure(list(), class = c("collector_integer", 
"collector"))), .Names = c("ID", "ShortID", "Name", "Route", 
"ColumnStart", "ColumnEnd", "Date1", "Date2", "Date3", "Date4", 
"Date5", "Date6", "Date7", "Date8", "Date9")), default = structure(list(), 
class = c("collector_guess", 
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
EN

回答 1

Stack Overflow用户

发布于 2019-03-22 04:22:01

另一种方法,不一定建议使用

代码语言:javascript
复制
rowMeans(df*NA^!(col(df) >= df$ColumnStart & col(df) <= df$ColumnEnd), 
         na.rm = T)
# [1] 3.000000 7.142857 5.000000 3.333333 6.500000

解释:

col(df) >= df$ColumnStart & col(df) <= df$ColumnEnd是在匹配ColumnStartColumnEnd规范的(i,j)索引处TRUE的矩阵

NA^!(col(df) >= df$ColumnStart & col(df) <= df$ColumnEnd)是一个矩阵,它在上面的矩阵是TRUE的地方是1的,在其他地方是NA的。将其与df相乘,得到一个与df相同的矩阵,只是索引不匹配ColumnStartColumnEnd规范的所有元素都是NA

现在,我们可以使用na.rm = T获取其中的rowMeans,以获得所需的结果

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55288471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档