I have imported a file with headings and numbers in multiple columns using the following command.
irs_data <- read.csv(file="10incyallnoagi.csv")
I would like to divide the values in 1 column by another and then determine the highest 3 values.
salary_var <- c(irs_data[13]/irs_data[12])
head(sort(new_var, decreasing=TRUE), 3)
I keep getting the constant error. As a beginner to R, what does it mean "x must be atomic" in this context.
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) :
'x' must be atomic
The problem is that salary_var
is a list containing a single-element. The call to sort()
is then trying to sort a list, not an atomic element. You can see that salary_var
is a list by running str(salary_var)
. If you omit the c()
, you'll instead end up with a data frame with a single column, which gives the same problem.
Two simple solutions:
To sort the values in the element of the list, use
head(sort(salary_var[[1]], decreasing=TRUE), 3)
where the [[1]] selects the first element of the list and sorts the values within it.
Alternatively, create salary_var
explicitly as a numeric vector instead:
salary_var <- (irs_data[13]/irs_data[12])[[1]]
One note: in your post, you wrote new_var
instead of salary_var
in your call to sort()
which may confuse other readers.
you can use the unlist() to convert the list to a vector as the sort() function takes vector form for sorting. so just use
head(sort(unlist(new_var), decreasing=TRUE), 3)
来源:https://stackoverflow.com/questions/26247429/data-manipulation-in-r-x-must-be-atomic