R merge error: output filled of 'NA' for large data frames
R merge error: output filled of 'NA' for large data frames
我正在尝试在大型数据集上使用 R 的合并功能:
- 第一个数据框是 Dates called Dates_test (dim = 7472 x 1)
- 第二个数据框是称为 Histo_test 的日期和值(dim = 5064 x 501)。这里的日期是第一个数据框的子集。超过 604,000 个数值。
两个数据框的日期列都称为 "dates"。我使用合并功能如下:
test_test <- merge(x = Dates_test, y = Histo_test, by = "dates", all.x = TRUE)
它 returns 一个 7472 行 x 501 列的数据框,但填充了 'NA'。 Histo_test 数据的 None 在 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
你能尝试使用 join 而不是 plyr 包中的 merge 吗?
test_test <- merge(Dates_test, Histo_test, by = "dates", type = "left")
我想我有一个解决方案,但没有您的数据很难判断。这是使用 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
我正在尝试在大型数据集上使用 R 的合并功能:
- 第一个数据框是 Dates called Dates_test (dim = 7472 x 1)
- 第二个数据框是称为 Histo_test 的日期和值(dim = 5064 x 501)。这里的日期是第一个数据框的子集。超过 604,000 个数值。
两个数据框的日期列都称为 "dates"。我使用合并功能如下:
test_test <- merge(x = Dates_test, y = Histo_test, by = "dates", all.x = TRUE)
它 returns 一个 7472 行 x 501 列的数据框,但填充了 'NA'。 Histo_test 数据的 None 在 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
你能尝试使用 join 而不是 plyr 包中的 merge 吗?
test_test <- merge(Dates_test, Histo_test, by = "dates", type = "left")
我想我有一个解决方案,但没有您的数据很难判断。这是使用 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