2013-02-08 17 views
0

我在爲r的數據幀:司創建megafile R中

   Category1   Category 2  x    y x.x 
1      T     A  1    9 9 
2      T     B  2    8 9 
3      T     A  10    7 9 
4      T     C  19    6 9 
         z   a x.y   x.y x.y 
1   0.11111111   1 2342 0.0004269855 0.000 
2   0.22222222   3 2342 0.0012809564 0.001 
3   0.33333333   13 2342 0.0055508113 0.006 
4   0.44444444   32 2342 0.0136635354 0.014 

的最後兩列 - 因某種原因 - 不顯示我給他們(說x.1x.2)這個名字,而是始終顯示倒數第三列名稱。第x.1列是a/x.y,x.2的分割結果,只是四捨五入的結果。現在,已經創造了這個data.frame(約4,000 rows)我創建了一個簡單的CSV:

write.csv(DF, 'DF.csv') 

這 - 奇怪 - 產生34 GB文件。當我忽略最後兩列時,它變成了一個小文件2MB。我怎樣才能避免這個龐大的文件,它從哪裏來?

編輯


除法運算:

DF$x.1 <- DF$a/DF['x.y'] 

數據加載:

DF <- read.csv('data.csv', sep=';') 
+0

嗨,Arun,我編輯了一些東西,但是,由於內容是保密的,我無法粘貼CSV。但是,這並不重要,因爲在除最後一個列以外的所有列上使用write.csv時都是如此。這一個部門似乎產生了一個巨大的專欄 - 但我不知道爲什麼。 – oliver13 2013-02-08 23:18:46

+3

它非常重要,因爲如果沒有辦法在我們的機器上重現此行爲,我們無法調查可能發生的情況。 – joran 2013-02-08 23:26:46

+2

@ oliver13要開始,我會做'DF $ x.1 < - DF $ a/DF $ x.y'來獲得x.1作爲列名。 – agstudy 2013-02-08 23:27:49

回答

0

要避免語法錯誤,我認爲transform很適合這裏。使用它,您可以使用乾淨的語法基於現有列創建新列。

transform(DF,x.1 = a/x.y,x.2 = round(a/x.y,3)) 
    Category1 Category X2 x y x.x   z a x.y   x.1 x.2 
1   1  TRUE A 1 9 9 0.1111111 1 2342 0.0004269855 0.000 
2   2  TRUE B 2 8 9 0.2222222 3 2342 0.0012809564 0.001 
3   3  TRUE A 10 7 9 0.3333333 13 2342 0.0055508113 0.006 
4   4  TRUE C 19 6 9 0.4444444 32 2342 0.0136635354 0.014