2

我从一个向量开始,我将它 cbind() 转换为字符列表,然后转换为这样的数据框:

numbers <- c(110, 5, 43, 1008)
mat <- cbind(letters, numbers)
letters <- c("A", "B", "C", "D")
df <- data.frame(mat)

我应用了排序:

df[order(df[,2]),]

我得到:

  letters numbers
4       D    1008
1       A     110
3       C      43
2       B       5

它正在对列进行排序,就好像它查看第一个数字,然后是第二个等等,我无法弄清楚。sort() 函数适用于列,但我似乎无法应用于所有行...

谢谢!

4

1 回答 1

4

您以错误的方式创建了 data.frame。从字符矩阵开始,一切仍然是字符矩阵。你需要一个as.numeric()在那里(或以不同的方式开始)。

R> df <- data.frame(letters=LETTERS[1:4], numbers=c(110, 5, 43, 1008),
+                   stringsAsFactors=FALSE)
R> df
  letters numbers
1       A     110
2       B       5
3       C      43
4       D    1008
R>

我们可以检查列类型:

R> sapply(df, class)
    letters     numbers 
"character"   "numeric" 
R>

有了这个,排序按预期工作:

R> df[order(df[,2]),]
  letters numbers
2       B       5
3       C      43
1       A     110
4       D    1008
R> 
于 2013-11-12T03:34:04.060 回答