R中NA替换为上一行值及dplyr mutate向量循环问题求解
R实验数据清洗解决方案
1. 填充sample列的NA值
要将列中的NA替换为上一行的非NA值,直接使用tidyr包的fill()函数即可,该函数专为纵向填充缺失值设计:
library(tidyverse) # 向下填充sample列的NA temp_filled <- temp %>% fill(sample, .direction = "down")
2. 自动循环填充condition列
mutate本身支持向量循环,报错是因为你传入的向量长度和数据集行数不匹配,搭配rep()函数设置循环规则即可实现需求:
方案A:按指定向量循环填充
你提供的4组条件每组3行共12个元素,自动循环匹配60行数据集的写法如下:
temp_result <- temp_filled %>% mutate( condition = rep( c("UT", "Stimuli", "Inhib1", "Inhib2"), each = 3, # 每个条件对应3个重复 length.out = n() # 长度自动匹配数据集行数,循环填充 ) )
方案B:一步完成无需先填sample列
如果不需要先填充sample列,也可以直接根据每行的位置分组生成对应字段,一步得到结果:
temp_result <- temp %>% mutate( sample = rep(1:20, each = 3), # 已知20个样本各3行,直接生成 condition = rep(c("UT", "Stimuli", "Inhib1", "Inhib2"), each = 3, length.out = n()) )
内容的提问来源于stack exchange,提问作者Lena
相关产品推荐
相关产品推荐

