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

use*_*817 5 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) 
Run Code Online (Sandbox Code Playgroud)

我不断得到不断的错误.作为R的初学者,在这种情况下,"x必须是原子的"是什么意思.

Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 
  'x' must be atomic
Run Code Online (Sandbox Code Playgroud)

小智 9

问题是这salary_var是一个包含单个元素的列表.然后调用sort()是尝试对列表进行排序,而不是原子元素.您可以salary_var通过运行查看该列表str(salary_var).如果省略c(),则最终会得到一个包含单列的数据框,这会产生同样的问题.

两个简单的解决方

要对列表元素中的值进行排序,请使用

head(sort(salary_var[[1]], decreasing=TRUE), 3) 
Run Code Online (Sandbox Code Playgroud)

其中[[1]]选择列表的第一个元素并对其中的值进行排序.

或者,salary_var明确地创建为数字向量:

salary_var <- (irs_data[13]/irs_data[12])[[1]]
Run Code Online (Sandbox Code Playgroud)

一个注意事项:在你的帖子中,你写的new_var不是salary_var在你的电话中,sort()这可能会混淆其他读者.


小智 6

您可以使用unlist()将列表转换为向量,因为sort() 函数采用向量形式进行排序。所以只需使用

head(sort(unlist(new_var), decreasing=TRUE), 3) 
Run Code Online (Sandbox Code Playgroud)