在 table (R) 中填写缺失的枚举值
Fill in missing enumeration values in table (R)
我想在 table 中的一列中填写缺失值。在 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 的行,最后再次将 col1
和 col2
合并为一列。
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 = '-')
我们使用 base R
中的 expand.grid
创建一个完整的组合数据集
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
我想在 table 中的一列中填写缺失值。在 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 的行,最后再次将 col1
和 col2
合并为一列。
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 = '-')
我们使用 base R
中的 expand.grid
创建一个完整的组合数据集
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