2014-10-08 413 views
3

我已經使用以下命令導入了包含多個列中的標題和數字的文件。 irs_data <- read.csv(file="10incyallnoagi.csv")R中的數據處理:'X'必須是原子的

我想將1列中的值除以另一列,然後確定最高的3個值。

 salary_var <- c(irs_data[13]/irs_data[12]) 
    head(sort(new_var, decreasing=TRUE), 3) 

我不斷收到常量錯誤。作爲R的初學者,在這種情況下,「x必須是原子」是什麼意思?

Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 
    'x' must be atomic 
+0

嗨,你能提供樣本數據,以便貢獻者可以協助? – KFB 2014-10-08 00:34:49

+0

當您點擊2010年時,可以找到http://www.irs.gov/uac/SOI-Tax-Stats-County-Data數據。該文件是10incyallnoagi.csv。 – user2657817 2014-10-08 00:39:28

+0

建議在此提供一小段數據。 – KFB 2014-10-08 00:44:02

回答

6

問題是salary_var是一個包含單個元素的列表。然後調用sort()然後嘗試排序列表,而不是原子元素。您可以看到salary_var是一個運行str(salary_var)的列表。如果您省略了c(),您最終會得到一個帶有單列的數據框,這會出現同樣的問題。

兩種簡單的解決方案:

要在列表中的元素的值進行排序,使用

head(sort(salary_var[[1]], decreasing=TRUE), 3) 

其中[[1]]選擇列表的第一元件和內排序的值它。

另外,明確創建salary_var作爲數字載體來代替:

salary_var <- (irs_data[13]/irs_data[12])[[1]] 

一個注意:在您的文章,您在您的來電sort()這可能會混淆其它讀者寫道:new_var而不是salary_var

0

可以使用不公開()到列表轉換爲向量作爲排序() 函數採用矢量形式進行排序。 所以只是使用

head(sort(unlist(new_var), decreasing=TRUE), 3) 
相關問題