填写表R中缺失的枚举值

问题描述

我想在表格的一列中填写缺失值。在 combName 列中,值应该上升到 20-400,然后从 21-1 继续到 21-400,依此类推。对于每个缺失值,应创建一个新行,该行的值按正确的枚举顺序排列,而该行的所有其他字段中的值为 0。

   combName sumLength RootID
   <chr>        <dbl>  <int>
 1 20-1          8.05      1
 2 20-2          4.61      1
 3 20-3         14.5       1
 4 20-8          2.29      1
 5 20-10        14.7       1
 6 20-11        23.0       4
 7 20-12        17.0       5
 8 20-13        66.9      14
 9 20-14        39.1       9
10 20-15        12.5       6
# ... with 1,099 more rows

有什么想法可以做到吗?

解决方法

您可以借助 tidyr 库中的函数来实现这一点。

combName 分成两列,在 '-' 上拆分。对于 col1 中的每个值,在 col2 中创建从 1 到 400 的行,最后再次将 col1col2 合并为一列。

library(tidyr)

df %>%
  separate(combName,c('col1','col2'),sep = '-',convert = TRUE) %>%
  complete(col1,col2 = 1:400,fill = list(sumLength = 0,RootID = 0)) %>%
  unite(combName,col1,col2,sep = '-')
,

我们使用 expand.grid 中的 base R 创建完整的组合数据集

full_dat <- data.frame(combName = do.call(paste,c(expand.grid(Var1 = 
  sub("-.*","",unique(df$combName)),Var2 = 1:400),sep="-"))

merge与原始数据集

out <- merge(full_data,df,by = "combName",all.x = TRUE)
out[is.na(out)] <- 0