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

如何在R语言中将DataFrame压缩为单行?

解决方案

针对你描述的DataFrame结构(x_、y_、t_列每行值一致,var1/var2/var3列各仅含一个非NA值),以下是几种高效的单行压缩实现方法:

方法1:使用dplyr包(tidyverse风格)

借助分组聚合提取每个变量列的非NA值,语法直观易读:

library(dplyr)

# 处理单个DataFrame
df_compressed <- df %>%
  group_by(x_, y_, t_) %>%
  summarise(across(c(var1, var2, var3), ~ first(na.omit(.))), .groups = "drop")

# 批量处理DataFrame列表
df_list <- list(df, df) # 示例列表
compressed_list <- lapply(df_list, function(d) {
  d %>%
    group_by(x_, y_, t_) %>%
    summarise(across(c(var1, var2, var3), ~ first(na.omit(.))), .groups = "drop")
})

方法2:使用data.table包(高效大数据处理)

适合处理大规模数据集,运行速度更快:

library(data.table)

# 处理单个DataFrame
setDT(df)
df_compressed <- df[, lapply(.SD, function(x) x[!is.na(x)]), by = .(x_, y_, t_)]

# 批量处理列表
compressed_list <- lapply(df_list, function(d) {
  setDT(d)
  d[, lapply(.SD, function(x) x[!is.na(x)]), by = .(x_, y_, t_)]
})

方法3:基础R实现(无需额外包)

不依赖第三方库,用原生函数完成需求:

# 处理单个DataFrame
group_cols <- unique(df[, c("x_", "y_", "t_")])
var_cols <- lapply(df[, c("var1", "var2", "var3")], function(col) col[!is.na(col)])
df_compressed <- cbind(group_cols, as.data.frame(var_cols))

# 批量处理列表
compressed_list <- lapply(df_list, function(d) {
  group_cols <- unique(d[, c("x_", "y_", "t_")])
  var_cols <- lapply(d[, c("var1", "var2", "var3")], function(col) col[!is.na(col)])
  cbind(group_cols, as.data.frame(var_cols))
})

核心逻辑

所有方法的思路一致:

  • 保留x_/y_/t_的唯一值(因每行值完全相同)
  • 对var1/var2/var3列,提取其中唯一的非NA有效数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:45:24