我使用以下命令在多列中导入了标题和数字的文件。
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
答案 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)