R 添加缺失的列和数据行(Dplyr/TidyR & Complete?)

标签 r dplyr tidyr

我相当习惯于为数据添加缺失的案例,但这个用例让我望而却步。

我有许多数据帧(略有不同),一个例子是:

> t1
  3 4 5
2 1 0 0
3 0 2 2
4 2 6 4
5 1 2 1

structure(list(`3` = c(1L, 0L, 2L, 1L), `4` = c(0L, 2L, 6L, 2L
), `5` = c(0L, 2L, 4L, 1L)), .Names = c("3", "4", "5"), row.names = c("2", 
"3", "4", "5"), class = "data.frame")

行名和列名应该从 1:5 开始,很明显,它们缺少设置为 NA 的单元格值。对于上面的示例,这将给出:
> t1
  1  2  3  4  5
1 NA NA NA NA NA
2 NA NA 1  0  0
3 NA NA 0  2  2
4 NA NA 2  6  4
5 NA NA 1  2  1 

在每种情况下,可能会丢失任何一行或多行和/或列。

我可以使用 Josh O'Brien 描述的方法轻松获取缺失的列 here但我缺少行方法。

任何人都可以帮忙吗?

最佳答案

我们可以通过 base R 以更简单的方式做到这一点。通过创建 matrix所需维度的 NA,然后根据 't1' 的行名和列名分配 't1' 的值

m1 <- matrix(NA, ncol=5, nrow=5, dimnames = list(1:5, 1:5))
m1[row.names(t1), colnames(t1)] <- unlist(t1)
m1
#   1  2  3  4  5
#1 NA NA NA NA NA
#2 NA NA  1  0  0
#3 NA NA  0  2  2
#4 NA NA  2  6  4
#5 NA NA  1  2  1

或使用 tidyverse
library(tidyverse)
rownames_to_column(t1, "rn") %>% 
      gather(Var, Val, -rn) %>% 
      mutate_at(vars(rn, Var), as.integer) %>%
      complete(rn = seq_len(max(rn)), Var = seq_len(max(Var))) %>% 
      spread(Var, Val)
# A tibble: 5 × 6
#     rn   `1`   `2`   `3`   `4`   `5`
#* <int> <int> <int> <int> <int> <int>
#1     1    NA    NA    NA    NA    NA
#2     2    NA    NA     1     0     0
#3     3    NA    NA     0     2     2
#4     4    NA    NA     2     6     4
#5     5    NA    NA     1     2     1

关于R 添加缺失的列和数据行(Dplyr/TidyR & Complete?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42978822/

相关文章:

r - 将逗号分隔的字符串拆分为 bool 列

r - ggplot2:叠加两个图并使用两个图例

r - 如何根据过滤条件添加计数列而不是在 dplyr 中分组?

r - 在R中,有一种方法可以使用带有任意参数的pivot_longer作为cols规范

r - 将 FIX 消息格式 ("Tag=Value") 转换为 CSV

r - 列表对象不能被强制输入'double

r - R 中 system() 命令中的括号

r - 使用 dplyr 和 lazyeval 进行编程

r - 评估用 R 中的字符/字符串向量编写的多个方程

r - 多值列的 dplyr 中的 Pivot_longer