如何修正R数据框列值错配问题并补全缺失值为NA?
R数据框值的跨列归类修复
先看原始错误分配的数据框:
df <- data.frame( price = c("1€", "1€", "2022-03-04", "4hr", "Iberia"), duration = c("2€", "1hr", "2022-01-02", "4hr", "Eurostart"), airline = c("3€", "1hr", "2022-01-03", "5min", "ITA"), dates = c("4€", "1hr 5min", "2022-01-03", "Air france", "Lufthansa") )
我们需要将所有值正确归类到price、duration、airline、dates列,无对应值的位置用NA填充,期望输出如下:
desired_output <- data.frame( price = c("1€", "1€", "2€", "3€", "4€", NA), duration = c("1hr", "1hr", "1hr 5min", "4hr", "4hr", "5min"), airline = c("Air france", "Iberia", "Eurostart", "ITA", "Lufthansa", NA), dates = c("2022-03-04", "2022-01-02", "2022-01-03", "2022-01-03", NA, NA) )
解决方案代码
核心思路是先把所有值提取成一维向量,再根据值的特征匹配到对应列:
# 1. 将数据框转成一维向量 all_values <- as.vector(t(df)) # 2. 按特征提取各列对应值 price_vals <- all_values[grepl("€", all_values)] duration_vals <- all_values[grepl("hr|min", all_values)] dates_vals <- all_values[grepl("^\\d{4}-\\d{2}-\\d{2}$", all_values)] airline_vals <- all_values[!grepl("€|hr|min|^\\d{4}-\\d{2}-\\d{2}$", all_values)] # 3. 统一各向量长度,用NA填充不足部分 max_len <- max(length(price_vals), length(duration_vals), length(airline_vals), length(dates_vals)) price_vals <- c(price_vals, rep(NA, max_len - length(price_vals))) duration_vals <- c(duration_vals, rep(NA, max_len - length(duration_vals))) airline_vals <- c(airline_vals, rep(NA, max_len - length(airline_vals))) dates_vals <- c(dates_vals, rep(NA, max_len - length(dates_vals))) # 4. 组合成目标数据框 result_df <- data.frame( price = price_vals, duration = duration_vals, airline = airline_vals, dates = dates_vals, stringsAsFactors = FALSE )
运行后result_df就和期望输出一致,这里用R原生的NA(缺失值)替代了字符串"NA",更符合R数据规范。
内容的提问来源于stack exchange,提问作者Gaaaa
相关产品推荐
相关产品推荐

