这让我疯了。我正在尝试使用order函数按升序排序第一行的数据框。下面是一个最小的例子:
values <- c(11,10,9,8,7,6,5,4,3,2,1)
labels <- c("A","B","C","D","E","F","G","H","I","J","K")
df <- data.frame(rbind(values,labels))
newdf <- df[,with(df,order(df[1,]))]
print(newdf)
我也用
尝试了这个newdf <- df[,order(df[1,])]
这是我得到的输出
X11 X2 X1 X10 X9 X8 X7 X6 X5 X4 X3
values 1 10 11 2 3 4 5 6 7 8 9
labels K B A J I H G F E D C
这显然是错误的!那么这里发生了什么?
答案 0 :(得分:3)
这是在R中构建数据的奇怪方法,因此会引起麻烦,但您可以使其工作。请参阅@thelatemail的评论:列与行。要在您的情况下使这项工作,请执行:
values <- c(11,10,9,8,7,6,5,4,3,2,1)
labels <- c("A","B","C","D","E","F","G","H","I","J","K")
df <- data.frame(rbind(values,labels), stringsAsFactors = FALSE)
newdf <- df[order(as.numeric(df["values",]))]
newdf
# X11 X10 X9 X8 X7 X6 X5 X4 X3 X2 X1
# values 1 2 3 4 5 6 7 8 9 10 11
# labels K J I H G F E D C B A
特别注意,在创建数据框时stringsAsFactors = FALSE
。
请记住,data.frames是列表,列表的每个元素都是一个相同长度的向量(可能是一个列表,但通常是一个原子向量,特别是如果以标准方式构造)。数据框的各个元素是列。行只是具有相同索引值的嵌套元素。这样可以更轻松地使用这样的数据框:
df <- data.frame(values = values, labels = labels)
df[order(df$values),]
# values labels
# 11 1 K
# 10 2 J
# 9 3 I
# 8 4 H
# 7 5 G
# 6 6 F
# 5 7 E
# 4 8 D
# 3 9 C
# 2 10 B
# 1 11 A
在这里,您不必担心当您使用另一个角色向量对齐时,您的数字是否会被强制转换为角色和/或因素。在此示例中,labels
是否是一个因素对values
没有影响。