You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中计算每个样本的R与P时间序列的趋势相关性?

计算每个样本的时间序列趋势相关性

Base R 实现

首先注意原数据中P列是P_T4,而需求是使用P_T3,先假设这是笔误,先修正列名(如果实际不需要修正,跳过这一步):

# 修正P列名(若原数据的P_T4是笔误)
names(df)[names(df) == "P_T4"] <- "P_T3"

接下来用apply按行处理每个样本,提取R和P的时间序列向量并计算相关系数:

# 逐样本计算相关性
sample_correlations <- apply(df, 1, function(row) {
  r_seq <- c(row["R_T1"], row["R_T2"], row["R_T3"])
  p_seq <- c(row["P_T1"], row["P_T2"], row["P_T3"])
  cor(r_seq, p_seq)
})

# 转换为易读的数据框
result <- data.frame(
  Sample = names(sample_correlations),
  Trend_Correlation = sample_correlations,
  row.names = NULL
)

print(result)

Tidyverse 实现

如果偏好tidy风格的代码,可以先将宽表转换为长表,再分组计算:

library(tidyverse)

# 修正列名(若需要)
df <- df %>% rename(P_T3 = P_T4)

# 宽表转长表,拆分变量与时间点
long_df <- df %>%
  rownames_to_column("Sample") %>%
  pivot_longer(-Sample, names_to = c("Var", "Time"), names_sep = "_") %>%
  filter(Time %in% c("T1", "T2", "T3"))

# 分组计算每个样本的R与P序列相关性
result <- long_df %>%
  pivot_wider(names_from = Var, values_from = value) %>%
  group_by(Sample) %>%
  summarise(Trend_Correlation = cor(R, P)) %>%
  ungroup()

print(result)

补充说明

  • 上述代码默认计算皮尔逊相关系数,如果需要斯皮尔曼或肯德尔相关,只需在cor()函数中添加method = "spearman"或method = "kendall"
  • 如果原数据中的P_T4并非笔误,而是确实要使用P_T1、P_T2、P_T4作为P的时间序列,只需修改代码中提取P向量的列名即可

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:15:44