Tôi đang cố gắng điền một vector nhị phân dựa trên giao điểm của hai dữ liệu.frames trên nhiều tiêu chí.R cắt giao dữ liệu.trên nhiều tiêu chí
Tôi có mã làm việc nhưng tôi cảm thấy rằng nó là bộ nhớ quá mức chỉ để có được vector nhị phân.
Khi tôi áp dụng mã của mình cho toàn bộ dữ liệu của tôi (40mm + hàng). Tôi bắt đầu có vấn đề về trí nhớ.
Có cách nào đơn giản hơn để tạo vectơ không?
Dưới đây là một số dữ liệu mẫu (ví dụ, mẫu phụ sẽ chỉ bao gồm obs trong mẫu đầy đủ.):
ob1_1 <- as.data.frame(cbind(c(1999),c("111","222","666","777")),stringsAsFactors=FALSE)
ob2_1 <- as.data.frame(cbind(c(2000),c("111","333","555","777")),stringsAsFactors=FALSE)
ob3_1 <- as.data.frame(cbind(c(2001),c("111","222","333","777")),stringsAsFactors=FALSE)
ob4_1 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)
full_sample <- rbind(ob1_1,ob2_1,ob3_1,ob4_1)
colnames(full_sample) <- c("yr","ID")
ob1_2 <- as.data.frame(cbind(c(1999),c("111","222","777")),stringsAsFactors=FALSE)
ob2_2 <- as.data.frame(cbind(c(2000),c("333")),stringsAsFactors=FALSE)
ob3_2 <- as.data.frame(cbind(c(2001),c("888")),stringsAsFactors=FALSE)
ob4_2 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)
sub_sample <- rbind(ob1_2,ob2_2,ob3_2,ob4_2)
colnames(sub_sample) <- c("yr","ID")
Đây là mã làm việc của tôi:
q_intersect <- ""
q_intersect <- paste(q_intersect , "select a.yr, a.ID ", sep=" ")
q_intersect <- paste(q_intersect , "from full_sample a ", sep=" ")
q_intersect <- paste(q_intersect , "intersect ", sep=" ")
q_intersect <- paste(q_intersect , "select b.yr, b.ID ", sep=" ")
q_intersect <- paste(q_intersect , "from sub_sample b ", sep=" ")
q_intersect <- trim(gsub(" {2,}", " ", q_intersect))
intersect_temp <- cbind(sqldf(q_intersect),1)
colnames(intersect_temp) <- c("yr","ID","in_both")
q_expand <- ""
q_expand <- paste(q_expand , "select in_both ", sep=" ")
q_expand <- paste(q_expand , "from full_sample a ", sep=" ")
q_expand <- paste(q_expand , "left join intersect_temp b ", sep=" ")
q_expand <- paste(q_expand , "on a.yr=b.yr ", sep=" ")
q_expand <- paste(q_expand , "and a.ID=b.ID ", sep=" ")
q_expand <- trim(gsub(" {2,}", " ", q_expand))
solution <- as.integer(sqldf(q_expand)[,1])
solution [is.na(solution)] <- 0
Cảm ơn trước thời hạn đối với bất kỳ Cứu giúp!
Bạn nên giải thích những gì bạn muốn trong ngôn ngữ tự nhiên. (Mã bạn nói là làm việc chỉ bị khóa phiên R của tôi, có thể vì không có chức năng 'trim'?) Không, lệnh gọi' sqldf' đầu tiên sẽ khóa nó. –
@Dwin, tôi vừa gặp vấn đề về khóa. Nhưng chỉ trong 4 dòng đầu tiên của phần 'q_intersect'. Ngẫu nhiên, Brad, trong câu hỏi trước của bạn, bạn đang sử dụng 'data.table' và ở đây bạn đang sử dụng' data.frame'. Đây có phải là cố ý không? –
@RicardoSaporta Xin chào. Có dữ liệu không được gắn thẻ. Xem cuộc thảo luận trong phòng chat ngày hôm qua đã sửa chữa tôi. Có thể thực hiện một quá trình quét không được vá lớn hơn. Khung nhìn SO là các thẻ dành cho các câu hỏi không phải là câu trả lời. Với đôi mắt mới, bây giờ tôi thấy và đồng ý rằng tìm kiếm "data.table data.table là: câu hỏi" là những gì "[data.table]" một mình nên như thế nào. Tuy nhiên, có vẻ như ok (xem trò chuyện) để gắn thẻ các câu trả lời được chấp nhận bằng cách sử dụng 'data.table' trong đó số phiếu> 10 là tốt. Để tìm kiếm câu trả lời bằng cách sử dụng data.table, chúng ta có thể sử dụng "[r] - [data.table] data.table là: answer". –