R合并错误:对于大数据帧,输出填充“NA”

时间:2017-07-21 13:00:17

标签: r dataframe merge na

我试图在大型数据集上使用R的合并功能:

  • 第一个数据框是名为Dates_test(dim = 7472 x 1)
  • 的日期
  • 第二个数据框是名为Histo_test的日期和值(dim = 5064 x 501)。这里的日期是第一个数据帧的子集。拥有超过604,000个数值。

两个数据框的日期列称为“日期”。我使用合并功能如下:

test_test <- merge(x = Dates_test, y = Histo_test, by = "dates", all.x = TRUE)

它返回一个7472行×501列的数据帧,但填充'NA'。 Histo_test数据都不在test_test中。

我尝试在较小的数据集上做同样的事情并且工作正常。因此,我认为错误可能来自表的大小。

见下面的完整代码:

Histo_test <- read.table(Name_test[1], fill = TRUE,header=TRUE, sep=",")
Dates_test <- read.table(Name_test[2], fill = TRUE,header=TRUE, sep=",")
test_test <- merge(x = Dates_test, y = Histo_test, by = "dates", all.x = TRUE)

输出填充'NA':

> sum(is.numeric(test_test))
[1] 0
> sum(is.na(test_test))
[1] 3736000

2 个答案:

答案 0 :(得分:0)

我认为我有一个解决方案,但没有你的数据很难说清楚。以下是使用dplyr的解决方案。如果这是您所追求的,请使用您自己的数据进行尝试。

library(dplyr)

Dates_test <- data.frame(dates = seq(as.Date("2017-01-01"),as.Date("2017-12-31"),by="day"))
Histo_test <- data.frame(dates = seq(as.Date("2017-01-01"),as.Date("2017-12-31"),by="month"),
                         Values =1:12,
                         Values2=letters[1:12])

Output <- left_join(Dates_test,Histo_test,by="dates")

head(Output)

输出:

       dates Values Values2
1 2017-01-01      1       a
2 2017-01-02     NA    <NA>
3 2017-01-03     NA    <NA>
4 2017-01-04     NA    <NA>
5 2017-01-05     NA    <NA>
6 2017-01-06     NA    <NA>

修改

以下是使用csvs的代码

Dates_test <- read.csv("merge_issue_dates.csv")
Dates_test$dates <- as.Date(Dates_test$dates)

Hist_dates <- read.csv("merge_issue.csv",)
Hist_dates$dates <- as.Date(Hist_dates$Timestamp,format="%d/%m/%Y")
Output <- left_join(Dates_test,Hist_dates,by="dates")

问题是,不一致的日期格式(已修复为as.Date(),而merge_issue.csv中的日期列称为Timestamp

答案 1 :(得分:-1)

您是否可以尝试使用联接而不是从包plyr进行合并?

test_test <- merge(Dates_test, Histo_test, by = "dates", type = "left")