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

R添加缺失的数据列和数据行(Dplyr/TidyR&;Complete?),r,dplyr,tidyr,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"),

我已经习惯于为数据添加缺失的用例,但我无法理解这个用例

我有许多数据帧(略有不同),例如:

> 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描述的方法很容易地获得缺少的列,但是我缺少row方法


有人能帮忙吗?

我们可以通过
base R
更轻松地实现这一点,方法是创建所需维度的NAs的
矩阵
,然后根据“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

根据Josh O'Brien提到的解决方案,您可以执行相同的操作,但可以使用
行名
而不是
名称
。请看下面的代码

df <- data.frame(a=1:4, e=4:1)
colnms <- c("a", "b", "d", "e") 
rownms <- c("1", "2", "3", "4", "5")
rownames(df) <- c("1", "3", "4", "5")

## find missing columns and replace with zero, and order them
Missing <- setdiff(colnms, names(df))
df[Missing] <- 0
df <- df[colnms]
df

## do the same for rows
MissingR <- setdiff(rownms, rownames(df))
df[MissingR,] <- 0
df <- df[rownms,]
df

# > df
#  a b d e
#1 1 0 0 4
#2 0 0 0 0
#3 2 0 0 3
#4 3 0 0 2
#5 4 0 0 1

df在
base R
中,您可以执行
m1 Wow。这是一种非常有效的方法。我刚刚设法解决了如何在行名上使用setdiff。但仍然是一行脚本,而不是大约8行!感谢阿克伦(一如既往)
df <- data.frame(a=1:4, e=4:1)
colnms <- c("a", "b", "d", "e") 
rownms <- c("1", "2", "3", "4", "5")
rownames(df) <- c("1", "3", "4", "5")

## find missing columns and replace with zero, and order them
Missing <- setdiff(colnms, names(df))
df[Missing] <- 0
df <- df[colnms]
df

## do the same for rows
MissingR <- setdiff(rownms, rownames(df))
df[MissingR,] <- 0
df <- df[rownms,]
df

# > df
#  a b d e
#1 1 0 0 4
#2 0 0 0 0
#3 2 0 0 3
#4 3 0 0 2
#5 4 0 0 1