我正在尝试按一列数字对数据框进行排序,而我会对数字进行字母数字排序。如果数据框转换为矩阵,则排序有效。
df[order(as.numeric(df[,2])),]
V1 V2
1 a 1
3 c 10
2 b 2
4 d 3
> m <- as.matrix(df)
> m[order(as.numeric(m[,2])),]
V1 V2
[1,] "a" "1"
[2,] "b" "2"
[3,] "d" "3"
[4,] "c" "10"
答案 0 :(得分:2)
V1 <- letters[1:4]
V2 <- as.character(c(1,10,2,3))
df <- data.frame(V1,V2, stringsAsFactors=FALSE)
df[order(as.numeric(df[,2])),]
给出
V1 V2
1 a 1
3 c 2
4 d 3
2 b 10
但是
V1 <- letters[1:4]
V2 <- as.character(c(1,10,2,3))
df <- data.frame(V1,V2)
df[order(as.numeric(df[,2])),]
给出
V1 V2
1 a 1
2 b 10
3 c 2
4 d 3
这是因为因素。
感谢评论员akrun和Imo。用str(df)检查两个dfs中的每一个。另外,给出了factor()函数帮助菜单的更多细节。向下滚动到“警告”以了解有关问题的更多详细信息。
答案 1 :(得分:1)
您是否可以更具体地了解您的初始数据帧? 因为通过运行此代码:
df<-data.frame(c("a","b","c","d"),c(1,2,10,3))
colnames(df)<-c("V1","V2")
#print(df)
df.order<-df[order(as.numeric(df[,2])),]
print(df.order)
我得到了正确答案:
V1 V2
1 a 1
2 b 2
4 d 3
3 c 10
答案 2 :(得分:-2)
编辑:
列值可能被视为因素。
尝试强制转换为字符然后整数。
示例复制并从控制台粘贴:
> Foo <- data.frame('ABC' = c('a','b','c','d'),'123' = c('1','2','10','3'))
> Foo[order(as.integer(as.character(Foo[,2]))),]
ABC X123
1 a 1
2 b 2
4 d 3
3 c 10