你好,这个问题我没有完全理解,比如说列名中的“11 & 1”等是不是你最后问题中提到的“条件11”?以及你只给了部分数据,因此“编号”只有一种,基于这个数据小样,比较不好回答你的问题。因此下面我就在你给的数据基础上,构建一个虚拟数据,尝试提供解决方法;此外,你给出的数据小样的时间是从“-183 ms”到“-200 ms”,我就假设你的每个编号的时间范围都是你问题提到的时间范围,即“0-200 ms”。如果没答到点上,推荐你完善下原本的问题描述,新手必读这篇帖子能够帮助你更好地获得帮助哈。
# 构建数据
mydt <- matrix(
# 输入数据,其中:为了回答你的问题,我把一些编号“10”改成了“09”,这样就有两种编号了
c(1, 10, "lihan", 1, -200, -0.016923, -0.016666, -0.057258, -0.018594,
1, 10, "lihan", 2, -199, -0.016036, -0.014904, -0.056993, -0.018088,
1, 10, "lihan", 3, -198, -0.015641, -0.01323, -0.056075, -0.019202,
1, 10, "lihan", 4, -197, -0.01574, -0.014828, -0.056183, -0.021395,
1, 10, "lihan", 5, -196, -0.016135, -0.017664, -0.055358, -0.022239,
1, 10, "lihan", 6, -195, -0.015839, -0.019351, -0.054626, -0.022003,
1, 10, "lihan", 7, -194, -0.015248, -0.019003, -0.055574, -0.020777,
1, 10, "lihan", 8, -193, -0.013867, -0.018037, -0.055868, -0.02036,
1, 10, "lihan", 9, -192, -0.012881, -0.017335, -0.05523, -0.019944,
1, 10, "lihan", 10, -191, -0.013966, -0.017872, -0.053006, -0.020068,
1, 10, "lihan", 11, -190, -0.015643, -0.018497, -0.050503, -0.020282,
1, 10, "lihan", 12, -189, -0.016531, -0.020272, -0.050238, -0.022115,
1, 09, "lihan", 13, -188, -0.01732, -0.020455, -0.050159, -0.022869,
1, 09, "lihan", 14, -187, -0.016926, -0.019489, -0.050453, -0.021373,
1, 09, "lihan", 15, -186, -0.017617, -0.01755, -0.050468, -0.018707,
1, 09, "lihan", 16, -185, -0.017025, -0.015964, -0.049923, -0.017391,
1, 09, "lihan", 17, -184, -0.015447, -0.014732, -0.048352, -0.016885,
1, 09, "lihan", 18, -183, -0.012883, -0.01465, -0.046502, -0.017098),
ncol = 9, byrow = TRUE
)
# 转化成数据框
mydt <- as.data.frame(mydt)
# 加入列名,其中:不知道你问题中说的“条件11”等是不是对应的数据中的标题“11 & 1”,我就擅自将它们后面的“& 1”都去掉了
names(mydt) <-
c("组别", "编号", "姓名", "bin", "time(ms)", "11", "22", "33", "44")
# 查看当前的数据
View(mydt)
可见此时这个数据长这样:
# 提取编号的类别
id <- unique(mydt$编号)
# 可以用tidyverse中的pivot_longer()、group_by()和summarise()求“11”、“22”、“33”、“44”四列的平均值;不过此处为了直观一点,用for循环结构求不同编号对应的行数据下这四列的平均值,并打印出来
for (i in id) {
for (j in c("11", "22", "33", "44")) {
# 保留每个编号对应的行
temp <- subset(mydt, 编号 == i)
# 提取要计算的列
temp <- temp[, j]
# 目前数据中这四列类型都是字符而非数字,因此将它们先转换成数字类型
temp <- as.numeric(temp)
# 再求平均值
temp <- mean(temp)
# 然后输出编号、条件和对应结果,当然你可以建立一个新的对象用来存储结果,方便下一步处理
cat(i, j, temp, "\n")
}
}
# 结果为:
# 10 11 -0.01537083
# 10 22 -0.01730492
# 10 33 -0.05474267
# 10 44 -0.02042225
# 9 11 -0.016203
# 9 22 -0.01714
# 9 33 -0.0493095
# 9 44 -0.01905383