2016-06-09 115 views
1

我有一個CSV格式的大數據文件,我只需要導入某些行。讓我們調用這個大文件A.csv。有選擇地讀取r文件中的CSV文件

我有另一個csv文件,即B.csv有兩列和一些行。

現在我需要進口僅來自A.csv具有相同某行。所以B.csv列的值前兩個值數據的那些行,我想這導入這兩個文件

後但它似乎需要永遠

while(count<4632) 
{ 
    count=count+1 
    count2=0 
    while(count2<17415) 
    { 
     count2=count 2+1 
     if(B[count,1]==A[count2,1]) 
      dbase[count,]=A[count2,] 
    } 
} 

請幫助!!

回答

1

您有兩個嵌套的大循環,並且您正在動態生長矢量。兩者都對性能不利。嘗試引導這兩個操作。

例如:

set.seed(123) 
dfA <- data.frame(
    a = sample(LETTERS, 10000, TRUE), 
    b = sample(LETTERS[1:3], 10000, TRUE), 
    c = rnorm(10000), 
    stringsAsFactors = FALSE 
) 
dfB <- data.frame(
    a = sample(LETTERS, 1000, TRUE), 
    b = sample(LETTERS[1:3], 1000, TRUE), 
    stringsAsFactors = FALSE 
) 

dfC <- dfA[ which(paste(dfA$a, dfA$b) %in% paste(dfB$a, dfB$a)), ] 
+0

非常感謝!!這只是我在stackoverflow上的第二個問題,很高興與幫助..保持這個傢伙..你正在幫助我們成長! –

0

也許我有太少的資料,但我會盡量回答...

我覺得你可以簡單地使兩個文件裝載只有較小的一個之間的連接。我會做這樣的事情與sqldf包的幫助:

library(sqldf) 

tmp_csv <- "path/of/your/big/file.csv" 

# load your small file and make sure the two columns 
# have the same name of the columns of the big file 
tmp_df <- read.csv("path/of/your/small/file.csv") 

# join the two dataset with a single sql query 
out_data <- read.csv2.sql(tmp_csv, sql = "select * from file join tmp_df using (Column1, Column2)", header = TRUE) 

您可以使用read.csv2.sql或read.csv.sql根據您的分隔符。 仔細檢查您的列的名稱,因爲它是連接操作的基本部分。