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

如何在R语言中按行选取每行最后n个非空值?

解决方案

Tidyverse 实现方案

结合dplyr的行处理能力和tidyr的列展开功能,就能精准提取每行最后3个非空值:

library(tidyverse)

# 定义单行处理逻辑:过滤空值后取最后3个
extract_last3 <- function(row_data) {
  non_empty_vals <- row_data[row_data != ""]
  tail(non_empty_vals, 3)
}

# 执行数据处理
tidy_result <- df %>%
  rowwise() %>%
  mutate(last3_values = list(extract_last3(c_across(everything())))) %>%
  unnest_wider(last3_values, names_sep = "_") %>%
  select(starts_with("last3_"))

print(tidy_result)

运行后会生成包含每行最后3个非空值的新数据框,列名默认是last3_1、last3_2、last3_3,可通过rename函数自定义列名。

Base R 替代方案

如果不想加载tidyverse包,用base R的原生函数也能实现需求:

# 逐行提取最后3个非空值
row_processed <- apply(df, 1, function(row) {
  non_empty <- row[row != ""]
  tail(non_empty, 3)
})

# 转换为标准数据框,自动补全短行的NA值
base_result <- as.data.frame(do.call(rbind, lapply(row_processed, function(x) {
  length(x) <- 3
  x
})))

colnames(base_result) <- c("last_val1", "last_val2", "last_val3")
print(base_result)

结果说明

两种方案都会精准提取每行末尾的3个非空内容,比如第一行最终保留" Augustuspl. 4"、" 55131 Mainz"、" Germany",第六行则会提取最后3个有效地址信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:25:44