R语言:如何基于指定行的非空值筛选数据集列?
解决R语言筛选指定列的需求
需求说明
从给定的数据框中筛选出players列,以及player D所在行存在非空值的列。
原数据集
df <- data.frame(players=c('A', 'B', 'C', 'D', 'E'), rebounds=c("", 3, "", "", ""), assists=c("", 9, 4, 4, 3), ratings=c("", 8, 4, 7, ""))
最优解法
以下两种方法都能高效实现需求,可根据是否使用tidyverse工具选择:
方法1:使用dplyr(tidyverse风格,代码简洁)
library(dplyr) # 筛选目标列:保留players,加上D行非空的列 result <- df %>% select(players, which(.[df$players == "D", ] != ""))
方法2:基础R实现(无需额外安装包)
# 提取player D所在的行 d_row <- df[df$players == "D", ] # 确定需要保留的列:players列 + D行非空的列 keep_cols <- c("players", names(d_row)[d_row != ""]) # 筛选数据框 result <- df[, keep_cols, drop = FALSE]
输出结果
运行后得到的结果如下:
> print(result) players assists ratings 1 A 2 B 9 8 3 C 4 4 4 D 4 7 5 E 3
补充说明
如果数据中的空值是NA而非空字符串,只需将判断条件改为!is.na(d_row)即可适配。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

