为包含 NA 的每个列创建一个附加(虚拟)列的函数(在 R 中)
Function that creates an additional (dummy) column for each column that contains NA (in R)
我似乎无法解决这个问题:我有一个 R 数据集 (data.frame
),其中包含大量包含 NA
的列。我想为包含 NA
的 each 列创建一个附加列。我希望附加列是一个虚拟列,即 1
if NA
和 0
else。当然,我可以为每一列手动执行操作,但这会很痛苦……但是,到现在为止我可能应该这样做了。我试过 plyr
但到目前为止没有成功。
你可以试试这个
df <- as.data.frame(matrix(sample(c(0,1, NA), 100, replace=TRUE), 10, 10))
is.na(df)*1 # dummy data.frame
您可以使用 Map
将新列与 data.frame
的原始列相关联:
do.call(cbind, Map(function(u,v) data.frame(u,v), df, data.frame(is.na(df)+0L)))
# col1.u col1.v col2.u col2.v
#1 <NA> 1 NA 1
#2 a 0 NA 1
#3 b 0 NA 1
#4 <NA> 1 33 0
数据:
df = data.frame(col1=c(NA,'a','b',NA), col2=c(NA,NA,NA,33))
我似乎无法解决这个问题:我有一个 R 数据集 (data.frame
),其中包含大量包含 NA
的列。我想为包含 NA
的 each 列创建一个附加列。我希望附加列是一个虚拟列,即 1
if NA
和 0
else。当然,我可以为每一列手动执行操作,但这会很痛苦……但是,到现在为止我可能应该这样做了。我试过 plyr
但到目前为止没有成功。
你可以试试这个
df <- as.data.frame(matrix(sample(c(0,1, NA), 100, replace=TRUE), 10, 10))
is.na(df)*1 # dummy data.frame
您可以使用 Map
将新列与 data.frame
的原始列相关联:
do.call(cbind, Map(function(u,v) data.frame(u,v), df, data.frame(is.na(df)+0L)))
# col1.u col1.v col2.u col2.v
#1 <NA> 1 NA 1
#2 a 0 NA 1
#3 b 0 NA 1
#4 <NA> 1 33 0
数据:
df = data.frame(col1=c(NA,'a','b',NA), col2=c(NA,NA,NA,33))