如何扩展R中包含NA的行
我有一个数据帧D:如何扩展R中包含NA的行,r,dataframe,R,Dataframe,我有一个数据帧D: D=matrix(c(1,4,1,4,2,NA,4,2,3,2,1,3,4,3,2,1),nrow=4,ncol=4) D<-as.data.frame(D) > D V1 V2 V3 V4 1 1 2 3 4 2 4 NA 2 3 3 1 4 1 2 4 4 2 3 1 当然,在数据帧D中可能会出现几种情况 e、 g 我预期的结果是: > expect.D V1 V2 V3 V4 1 1 2 3 4 2 4
D=matrix(c(1,4,1,4,2,NA,4,2,3,2,1,3,4,3,2,1),nrow=4,ncol=4)
D<-as.data.frame(D)
> D
V1 V2 V3 V4
1 1 2 3 4
2 4 NA 2 3
3 1 4 1 2
4 4 2 3 1
当然,在数据帧D中可能会出现几种情况
e、 g
我预期的结果是:
> expect.D
V1 V2 V3 V4
1 1 2 3 4
2 4 1 2 3
3 4 2 2 3
4 4 3 2 3
5 4 4 2 3
6 1 4 1 2
7 4 2 3 1
V1 V2 V3 V4
1 2 3 4
4 1 1 3
4 2 1 3
4 3 1 3
4 4 1 3
4 1 2 3
4 2 2 3
4 3 2 3
4 4 2 3
4 1 3 3
4 2 3 3
4 3 3 3
4 4 3 3
4 1 4 3
4 2 4 3
4 3 4 3
4 4 4 3
1 4 1 2
4 2 3 1
如果我理解正确,您希望将NA扩展为4行,1,2,3,4种可能性各一行。所以一行:1,NA,3,4会变成
1, 1, 3, 4
1, 2, 3, 4
1, 3, 3, 4
1, 4, 3, 4
替换data.frame中的该行
那么像这样的事情可能会:
do.call("rbind",
lapply(1:nrow(D),
function(row) {
if (any(is.na(D[row, ]))) {
expand.grid(sapply(D[row, ], function(values) {
if (is.na(values)) {
1:4
} else {
values
}
}))
} else {
D[row, ]
}
}))
有些人可能有一个更优雅的解决方案,但它应该可以工作,即使每行有多个NAs
希望能有帮助
:)您尚未指定要以何种方式展开该行。是否根据V1
中的数字进行扩展?如果V1
是NA
会发生什么。你真的应该添加一些解释。
do.call("rbind",
lapply(1:nrow(D),
function(row) {
if (any(is.na(D[row, ]))) {
expand.grid(sapply(D[row, ], function(values) {
if (is.na(values)) {
1:4
} else {
values
}
}))
} else {
D[row, ]
}
}))