web-dev-qa-db-ja.com

Rでのデータ操作:「X」はアトミックである必要があります

次のコマンドを使用して、複数の列に見出しと番号が含まれるファイルをインポートしました。 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
5
user2657817

問題は、_salary_var_が単一の要素を含むリストであるということです。次に、sort()の呼び出しは、アトミック要素ではなくリストをソートしようとしています。 str(salary_var)を実行すると、_salary_var_がリストであることがわかります。 c()を省略すると、代わりに単一の列を持つデータフレームになり、同じ問題が発生します。

2つの簡単な解決策:

リストの要素の値を並べ替えるには、

_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_を記述しているため、他の読者を混乱させる可能性があります。

9
Sean Hughes

nlist()を使用して、リストをベクトルに変換できます。sort()関数は、並べ替えのためにベクトル形式を取ります。だからただ使う

head(sort(unlist(new_var), decreasing=TRUE), 3) 
4
Sameer Sinha