使用R语言dplyr包补全数据框数值并填充对应列
解决方案
可以用dplyr包的分组、序列生成和连接操作实现需求,步骤如下:
- 若未安装
dplyr,先运行install.packages("dplyr")安装包 - 按
sess分组,计算每组values的最小/最大值,生成该区间内间隔0.001的所有数值 - 将生成的扩展序列与原数据框做左连接,保留原有
phase值,新增数值的phase自动填充为NA
完整代码示例:
library(dplyr) # 你的原始数据 values = c(0.086,0.092, 0.099, 0.080,0.092, 1.02) sess = c(1, 1,1, 2, 2,2) phase = c(1,2,3,2,1,5) df = data.frame(values, sess, phase) # 生成扩展后的数据集 expanded_df <- df %>% group_by(sess) %>% summarise( # 生成当前session下从最小值到最大值、间隔0.001的所有数值 values = seq(min(values), max(values), by = 0.001), .groups = "drop" ) %>% # 左连接原数据,保留原有的phase值 left_join(df, by = c("sess", "values")) # 查看结果 head(expanded_df)
代码说明
group_by(sess):按会话分组处理数据summarise(seq(...)):为每个会话生成指定区间的数值序列,.groups="drop"用于取消分组状态left_join(...):以sess和values为连接键,将原数据中的phase匹配到对应数值上,没有匹配到的新生成数值,phase列会显示为NA,满足“仅保留原数据中的对应值”的要求
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

