2011-08-25 28 views
5

Tôi có hai tệp csv.Làm cách nào để tôi có thể tham gia hai tệp csv trong R?

file một có hai cột:

DD1 abct 
DD2 geate 
DD3 watec 
DD4 wwwca21 
DD5 bate789 

Tập hai có một cột:

abct 
geate 
bate789 

Tôi muốn có được một tập tin cắt ngắn từ một đến bao gồm những người phù hợp với tập hai, tức là

DD1 abct 
DD2 geate 
DD5 bate789 

Bạn có thể cho tôi biết cách thực hiện với R không?

mới để R.

+1

Thuật ngữ chính xác cho điều này là "tham gia bên trong". Gọi nó là "cắt ngắn" trong tiêu đề sẽ không giúp ích cho những nỗ lực tìm kiếm trong tương lai. –

Trả lời

7

Thứ nhất, đọc các tập tin với read.table:

file1 <- read.table("file1.csv", col.names=c("FOO", "BAR")) 
file2 <- read.table("file2.csv", col.names=c("BAR")) 

Sau đó kết hợp chúng:

merged <- merge(file1, file2) 

Và viết kết quả:

write.table(merged, "merged.csv") 
+0

Hai điểm khác: cho các hoạt động phức tạp hơn, hãy xem: http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right – Anatoliy

+0

Và thực sự lớn tập tin, R có thể không phải là lựa chọn tốt nhất, utils dòng lệnh như 'join' (hoặc' awk'/'sed') sẽ nhanh hơn, tôi nghĩ vậy. – Anatoliy

0

Đây là quảng cáo irect cách để làm điều đó bằng cách làm% trong%. Đây sẽ là khoảng cách nhanh nhất hoàn toàn trong R.

đọc trong các tập tin

datf1 <- read.table("file1.csv") #two column file 
datf2 <- read.table("file2.csv") #one column file 

chọn hàng bạn muốn ...% trong% làm cho một vector logic đó là chiều dài của đối số đầu tiên và là TRUE khi một mục nằm trong cả hai đối số và FALSE nếu không.

datf1 <- datf1[datf1[,2] %in% datf2[,1],] 

ghi ra ... Tôi đã thay đổi tên tệp từ tệp1 vì bạn thực sự không nên ghi đè dữ liệu gốc và tạo tệp mới1.

write.table(datf1, "file3.csv", sep = ',', row.names = FALSE, quote = FALSE) 
Các vấn đề liên quan