R语言如何填充DataFrame的Logger列,替换为前一个带下划线的标识值
R实现Logger列分组填充需求
核心思路
先识别出所有带下划线的分组标识,将其余位置的Logger值设为缺失值,再向下填充缺失值即可匹配需求,无需使用padr包。
解法1:tidyverse实现(最简洁)
library(tidyverse) # 原始数据 df <- data.frame("Logger" = c("119_1", "1","2","3","119_2","5","6","7","119_3","7","8","9"), "Temp" =c (4.5, 5.7, 3.8, 8.9, 8.6, 10.5, 11.0, 7.8, 5.6, 7.8, 9.9, 17.3), "RH" = c(6.5, 2.7, 11.8, 4.9, 3.6, 12.5, 115.0, 3.8, 9.6, 1.8, 3.9,5.3)) # 处理数据 df_result <- df %>% # 不含下划线的Logger替换为缺失值 mutate(Logger = ifelse(grepl("_", Logger), Logger, NA_character_)) %>% # 向下填充缺失值 fill(Logger, .direction = "down")
运行后得到的df_result和你需求的df_desired完全一致。
解法2:基础R实现(无需额外安装包)
# 原始数据 df <- data.frame("Logger" = c("119_1", "1","2","3","119_2","5","6","7","119_3","7","8","9"), "Temp" =c (4.5, 5.7, 3.8, 8.9, 8.6, 10.5, 11.0, 7.8, 5.6, 7.8, 9.9, 17.3), "RH" = c(6.5, 2.7, 11.8, 4.9, 3.6, 12.5, 115.0, 3.8, 9.6, 1.8, 3.9,5.3)) # 生成分组标识,每遇到一个带下划线的Logger就新增一个分组 group_id <- cumsum(grepl("_", df$Logger)) # 每个分组统一取第一个Logger值替换整组 df$Logger <- ave(df$Logger, group_id, FUN = function(x) x[1])
运行后会直接修改原始df的Logger列为目标值。
内容的提问来源于stack exchange,提问作者Effigy
相关产品推荐
相关产品推荐

