我有一个数据集,它有一个变量ColumnStart,用于标识要计算平均值的第一列。我还有第二个变量ColumnEnd,用于标识该计算中的最后一列。对于第一行,我想计算从第5列到第9列的平均值。从第6列到第11列的第二行,依此类推。
输出将为:
以下是R的更新后的dput:
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"))
发布于 2019-03-22 04:22:01
另一种方法,不一定建议使用
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
是在匹配ColumnStart
、ColumnEnd
规范的(i,j)索引处TRUE
的矩阵
NA^!(col(df) >= df$ColumnStart & col(df) <= df$ColumnEnd)
是一个矩阵,它在上面的矩阵是TRUE
的地方是1
的,在其他地方是NA
的。将其与df
相乘,得到一个与df
相同的矩阵,只是索引不匹配ColumnStart
和ColumnEnd
规范的所有元素都是NA
现在,我们可以使用na.rm = T
获取其中的rowMeans
,以获得所需的结果
https://stackoverflow.com/questions/55288471
复制相似问题