You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

时间使用测量(Time use measurement):基于给定数据在R语言中计算同步测量时长的实现方法

在R语言中计算两项测量同步记录的分钟数

针对你的需求,我整理了两种实现思路,取决于你是否依赖现有数据中的Match行来判断同步状态:

方法一:利用现有Match行直接计算

如果数据里已经给出了每个时间区间的同步分钟数(即Match行的数值),可以直接提取求和:

# 加载你的样本数据
df <- structure(list(X1 = c("Si", "Sj", "Match"), X2 = c("A", "D", NA), X3 = c("A", "D", NA), X4 = c("A", "D", NA), X5 = c("A", "D", NA), X6 = c("A", "D", NA), X7 = c("A", "D", NA), X8 = c("A", "E", NA), X9 = c("A", "E", NA), X10 = c("A", "E", NA), X11 = c("A", "A", "15"), X12 = c("A", "A", "15"), X13 = c("B", "A", NA), X14 = c("B", "A", NA), X15 = c("C", "A", NA), X16 = c("C", "A", NA), X17 = c("C", "A", NA), X18 = c("C", "A", NA), X19 = c("B", "A", NA), X20 = c("B", "A", NA), X21 = c("A", "A", "15"), X22 = c("A", "A", "15"), X23 = c("A", "A", "15"), X24 = c("A", "A", "15"), X25 = c("A", "A", "15")), row.names = c(NA, -3L), spec = structure(list(cols = list(X1 = structure(list(), class = c("collector_character", "collector")), X2 = structure(list(), class = c("collector_character", "collector")), X3 = structure(list(), class = c("collector_character", "collector")), X4 = structure(list(), class = c("collector_character", "collector")), X5 = structure(list(), class = c("collector_character", "collector")), X6 = structure(list(), class = c("collector_character", "collector")), X7 = structure(list(), class = c("collector_character", "collector")), X8 = structure(list(), class = c("collector_character", "collector")), X9 = structure(list(), class = c("collector_character", "collector")), X10 = structure(list(), class = c("collector_character", "collector")), X11 = structure(list(), class = c("collector_character", "collector")), X12 = structure(list(), class = c("collector_character", "collector")), X13 = structure(list(), class = c("collector_character", "collector")), X14 = structure(list(), class = c("collector_character", "collector")), X15 = structure(list(), class = c("collector_character", "collector")), X16 = structure(list(), class = c("collector_character", "collector")), X17 = structure(list(), class = c("collector_character", "collector")), X18 = structure(list(), class = c("collector_character", "collector")), X19 = structure(list(), class = c("collector_character", "collector")), X20 = structure(list(), class = c("collector_character", "collector")), X21 = structure(list(), class = c("collector_character", "collector")), X22 = structure(list(), class = c("collector_character", "collector")), X23 = structure(list(), class = c("collector_character", "collector")), X24 = structure(list(), class = c("collector_character", "collector")), X25 = structure(list(), class = c("collector_character", "collector"))), default = structure(list(), class = c("collector_guess", "collector")), delim = ","), class = "col_spec"), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))

# 提取Match行的同步分钟数,转换为数值型并求和
match_data <- as.numeric(df[df$X1 == "Match", -1])
total_sync_minutes <- sum(match_data, na.rm = TRUE)

# 输出结果
cat("总同步记录分钟数:", total_sync_minutes, "\n")

逻辑说明

  • 先筛选出Match行的数据,去掉第一列的标识字段X1
  • 将字符格式的分钟数转换为数值型,方便后续计算;
  • 使用sum()函数求和,通过na.rm = TRUE忽略NA值(NA表示该区间无同步,贡献0分钟)。

方法二:通过Si和Sj的测量值判断同步并计算

如果需要自己根据Si和Sj的测量值判断是否同步(不依赖Match行),可以用以下代码:

# 加载样本数据(若已加载可跳过此步骤)
df <- structure(list(X1 = c("Si", "Sj", "Match"), X2 = c("A", "D", NA), X3 = c("A", "D", NA), X4 = c("A", "D", NA), X5 = c("A", "D", NA), X6 = c("A", "D", NA), X7 = c("A", "D", NA), X8 = c("A", "E", NA), X9 = c("A", "E", NA), X10 = c("A", "E", NA), X11 = c("A", "A", "15"), X12 = c("A", "A", "15"), X13 = c("B", "A", NA), X14 = c("B", "A", NA), X15 = c("C", "A", NA), X16 = c("C", "A", NA), X17 = c("C", "A", NA), X18 = c("C", "A", NA), X19 = c("B", "A", NA), X20 = c("B", "A", NA), X21 = c("A", "A", "15"), X22 = c("A", "A", "15"), X23 = c("A", "A", "15"), X24 = c("A", "A", "15"), X25 = c("A", "A", "15")), row.names = c(NA, -3L), spec = structure(list(cols = list(X1 = structure(list(), class = c("collector_character", "collector")), X2 = structure(list(), class = c("collector_character", "collector")), X3 = structure(list(), class = c("collector_character", "collector")), X4 = structure(list(), class = c("collector_character", "collector")), X5 = structure(list(), class = c("collector_character", "collector")), X6 = structure(list(), class = c("collector_character", "collector")), X7 = structure(list(), class = c("collector_character", "collector")), X8 = structure(list(), class = c("collector_character", "collector")), X9 = structure(list(), class = c("collector_character", "collector")), X10 = structure(list(), class = c("collector_character", "collector")), X11 = structure(list(), class = c("collector_character", "collector")), X12 = structure(list(), class = c("collector_character", "collector")), X13 = structure(list(), class = c("collector_character", "collector")), X14 = structure(list(), class = c("collector_character", "collector")), X15 = structure(list(), class = c("collector_character", "collector")), X16 = structure(list(), class = c("collector_character", "collector")), X17 = structure(list(), class = c("collector_character", "collector")), X18 = structure(list(), class = c("collector_character", "collector")), X19 = structure(list(), class = c("collector_character", "collector")), X20 = structure(list(), class = c("collector_character", "collector")), X21 = structure(list(), class = c("collector_character", "collector")), X22 = structure(list(), class = c("collector_character", "collector")), X23 = structure(list(), class = c("collector_character", "collector")), X24 = structure(list(), class = c("collector_character", "collector")), X25 = structure(list(), class = c("collector_character", "collector"))), default = structure(list(), class = c("collector_guess", "collector")), delim = ","), class = "col_spec"), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"))

# 提取Si和Sj的测量值
si_measurements <- df[df$X1 == "Si", -1]
sj_measurements <- df[df$X1 == "Sj", -1]

# 计算每个时间区间的时长:6小时=360分钟,共24个区间,每个区间15分钟
interval_length <- 360 / ncol(df[,-1])

# 判断每个区间是否同步,同步则计入区间时长,求和得到总同步分钟数
total_sync_minutes <- sum(ifelse(si_measurements == sj_measurements, interval_length, 0))

# 输出结果
cat("总同步记录分钟数:", total_sync_minutes, "\n")

逻辑说明

  • 分别提取Si和Sj的所有测量值,去掉第一列的标识字段;
  • 根据总时长(360分钟)和区间数量(24个)计算每个区间的时长(15分钟);
  • 使用ifelse()逐个判断每个区间的Si和Sj值是否相等:相等则计入该区间时长,否则计入0,最后求和得到总同步分钟数。

内容的提问来源于stack exchange,提问作者Rstudent

火山引擎 最新活动