R语言:按指定规则重排多列字符值并补全缺失值
解决R语言数据列重排与缺失值填充问题
预处理数据
首先补全原始输入中的f行(原代码遗漏),并清理分割后元素的多余空格:
library(stringr) a<-"cat,hammer,green" b<-"hammer,green" c<-"cat,hammer,green" d<-"cat, green" e<-"green,cat" f<-"hammer" # 构建完整数据框 df <- data.frame(Col1 = c(a, b, c, d, e, f)) # 分割字符串为多列 df_split <- as.data.frame(str_split(df$Col1, ",", simplify = TRUE)) # 去除所有元素的前后空格 df_split[] <- lapply(df_split, trimws)
按指定列顺序匹配填充
定义目标列顺序cat, hammer, green,逐行检查每个目标值是否存在,存在则保留,不存在填充NA:
target_cols <- c("cat", "hammer", "green") # 逐行处理并转换为目标格式 result_df <- as.data.frame(t(apply(df_split, 1, function(row) { # 过滤空值 valid_vals <- row[row != ""] # 匹配目标列 sapply(target_cols, function(col) ifelse(col %in% valid_vals, col, NA)) })), stringsAsFactors = FALSE) colnames(result_df) <- target_cols
最终输出
运行上述代码后,result_df即为期望格式:
cat hammer green 1 cat hammer green 2 <NA> hammer green 3 cat hammer green 4 cat <NA> green 5 cat <NA> green 6 <NA> hammer <NA>
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

