在R中用NA填充数据帧

在R中用NA填充数据帧,r,dataframe,R,Dataframe,假设我有一个类似下面myData的数据集: set.seed(1234) Date <- seq(as.Date("1990-01-01"), as.Date("1990-12-01"), "months") Date <- rep(Date, 5) Species <- rep(c("cat", "lion", "tiger", "leopard", "cheetah"), each=12) Measurement <- rnorm(60) index <

假设我有一个类似下面myData的数据集:

set.seed(1234)

Date <- seq(as.Date("1990-01-01"), as.Date("1990-12-01"), "months")
Date <- rep(Date, 5)

Species <- rep(c("cat", "lion", "tiger", "leopard", "cheetah"), each=12)

Measurement <- rnorm(60)

index <- sample(1:60, 10)

myData <- data.frame(Date[-index], Species[-index], Measurement[-index])
set.seed(1234)

日期您正在从
tidyr
软件包中寻找
complete
功能,该软件包专为您设计:

tidyr::complete(myData, Date, Species)

# Source: local data frame [60 x 3]
# 
#          Date Species Measurement
#        (date)  (fctr)       (dbl)
# 1  1990-01-01     cat  -1.2070657
# 2  1990-01-01 cheetah  -0.5238281
# 3  1990-01-01 leopard  -2.1800396
# 4  1990-01-01    lion  -0.7762539
# 5  1990-01-01   tiger  -0.6937202
# 6  1990-02-01     cat   0.2774292
# 7  1990-02-01 cheetah  -0.4968500
# 8  1990-02-01 leopard  -1.3409932
# 9  1990-02-01    lion          NA
# 10 1990-02-01   tiger          NA
# ..        ...     ...         ...

您正在从
tidyr
软件包中寻找
complete
功能,该软件包专为您设计:

tidyr::complete(myData, Date, Species)

# Source: local data frame [60 x 3]
# 
#          Date Species Measurement
#        (date)  (fctr)       (dbl)
# 1  1990-01-01     cat  -1.2070657
# 2  1990-01-01 cheetah  -0.5238281
# 3  1990-01-01 leopard  -2.1800396
# 4  1990-01-01    lion  -0.7762539
# 5  1990-01-01   tiger  -0.6937202
# 6  1990-02-01     cat   0.2774292
# 7  1990-02-01 cheetah  -0.4968500
# 8  1990-02-01 leopard  -1.3409932
# 9  1990-02-01    lion          NA
# 10 1990-02-01   tiger          NA
# ..        ...     ...         ...

我们不需要包裹。使用
expand.grid
from
base R

merge(expand.grid(Date=unique(myData$Date), 
      Species=as.character(unique(myData$Species))), myData, all.x=TRUE)
数据
myData我们不需要软件包。使用
expand.grid
from
base R

merge(expand.grid(Date=unique(myData$Date), 
      Species=as.character(unique(myData$Species))), myData, all.x=TRUE)
数据
myData为了完整起见,这里还有一个
data。表
解决方案:

library(data.table)
setDT(myData)[CJ(Date = Date, Species = Species, unique = TRUE), on = .(Date, Species)]

它使用
CJ()。这类似于。

为了完整起见,这里还有一个
数据。表
解决方案:

library(data.table)
setDT(myData)[CJ(Date = Date, Species = Species, unique = TRUE), on = .(Date, Species)]

它使用
CJ()。这类似于。

我正在尝试您所说的内容,但我遇到了一个错误:“错误:无法加入'Date'x'Date'列:索引超出范围”请注意,您的数据没有正确命名。重命名数据,然后相应地使用列名。Yep。我没有注意到。谢谢我正在尝试您所说的,但是我得到了一个错误:“错误:无法在列'Date'x'Date'上加入:索引超出范围”注意,您的数据没有正确命名。重命名数据,然后相应地使用列名。Yep。我没有注意到。谢谢