如何在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
相关产品推荐
相关产品推荐

