R中的数据操作:'X'必须是原子的

时间:2014-10-08 00:31:49

标签: r input import-from-csv

我使用以下命令在多列中导入了标题和数字的文件。 irs_data <- read.csv(file="10incyallnoagi.csv")

我想将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

2 个答案:

答案 0 :(得分:7)

问题是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]]

一个注意事项:在您的帖子中,您在致电new_var时写了salary_var而不是sort(),这可能会让其他读者感到困惑。

答案 1 :(得分:2)

您可以使用取消列表()将列表转换为矢量排序() 函数采用矢量形式进行排序。 所以只需使用

head(sort(unlist(new_var), decreasing=TRUE), 3)