2015-04-14 68 views
0

我想讀3獨立的數據集的每一個具有不同的尺寸和繪製他們使用的箱線圖,例如:繪製不同尺寸的獨立的數據集中的R

Set1 Set2 Set3 
1 1 1 
1 2 2 
1 2 2 
    3 3 
    3 3 
      4 

(作爲字符串:"Set1 Set2 Set3\n1 1 1\n1 2 2\n1 2 2\n 3 3\n 3 3\n 4\n"

但是,列寬可能會有所不同,例如當一個數值超過5位時。

當我做results = read.table("data.dat", header=TRUE) RStudio會報告:

line 4 did not have 3 elements 

使用選項fill=TRUE將在第4行的每場向左移動,並用NA直接偏置數據填補空場ONT的權利。

由於列大小可能會有所不同,因此我嘗試將其作爲CSV文件加載,但這樣做的結果是Set1的中位數變爲NA

相同的數據,CSV:

Set1,Set2,Set3 
1,1,1 
1,2,2 
1,2,2 
,3,3 
,3,3 
,,4 

所以,我怎麼能繪製所有集,而不會單一數據圖中由R被改變?

EDIT1:給出了使用的數據格式的更多細節。另外我強調,列大小可能會有所不同,並且在示例中不是固定的。

+1

嘗試'中位數(...,na.rm = TRUE)' – konvas

+0

首先讀取設置爲'fill = TRUE',然後使用'boxplot(df,na.omit = TRUE)' – DatamineR

+0

@konvas:worked,thx ... @ DatamineR:這在plot中沒有任何區別: -/@both:我仍然存在'fill = TRUE'將值移到左邊,然後用'NA'填充其餘部分的問題(當我不讀csv時)。 – Paddre

回答

1

這會讀取帶指示字段寬度的指示文件。第一個(標題行)被跳過,並使用指定的列名稱。空字段(na.strings="")被視爲NA

results <- read.fwf("data.dat", widths = c(5L, 5L, 5L), skip = 1, 
    na.strings = "", col.names = c("Set1", "Set2", "Set3")) 

boxplot(results) 

(圖片後繼續)

enter image description here

注:一個人不能從這個問題,告訴的data.dat文件的確切內容可能是至關重要的,但出於這個答案的目的,我們假設了這一點:

Lines <- c("Set1 Set2 Set3", 
      "1 1 1", 
      "1 2 2", 
      "1 2 2", 
      "  3 3", 
      "  3 3", 
      "   4") 
writeLines(Lines, "data.dat") 
+0

假設是正確的;-)將它添加到問題。它適用於我,但是你可以在'read.fwf(...)'行上給出一些解釋嗎?特別是:爲什麼它能夠工作以及如何工作? – Paddre

+0

另外(正如你可以在更新的隊列中看到的那樣),我想強調我不能被綁定到固定的列大小。所以關於CSV的解決方案可能會更有幫助 – Paddre

+1

已經添加了一些額外的評論。請注意,如果在問題的原始版本中列大小不固定,則輸入不明確,因爲您無法確定數字在哪個列中。最後一列的最後一行是否是4?第一列?如果您有csv輸入作爲修訂版本,則使用'read.csv(「data.dat」)' –