按字母和数字列对数据框进行排序

3

我一直在尝试使用以下多种方法按第一列(或日期)对数据框进行排序,但都没有成功。我怀疑可能是因为它试图按第一个数字排序,但我不确定应该如何更改才能正确排序行。数据集如下:

df1
    [day][sample1][sample2]
[1,]day0    22       11
[2,]day11   23       15
[3,]day15   25       14
[4,]day2    21       13
[5,]day8    20       17
...

我想按照日期对整行数据进行排序。我尝试了以下方法:

df[sort(as.character(df$day)),]
df[order(as.character(df$day)),]
mixedorder(as.character(df$day))   (gtools package)
仅仅输出一个数字索引。

当前代码:

df_0$day =  metadata_df[,3]
df_0 <- df_0[,c(8,1:7)]
df1 <- aggregate(df_0[,2:ncol(df_0)], df_0[1], mean)
df1 <- df1[mixedorder(as.character(df1$day)),]
df1$day <- factor(df1$day, levels = unique(df1$day))
rownames(df1) <- 1:nrow(df1)
##Plotting expression levels
Plot1 <- ggplot() +
  geom_line(data=df1, aes(x=day, y=sample1, group=1, color="blue"))+
  geom_line(data=df2, aes(x=day, y=sample1, group=2, color="red"))

请注意,我已经对df2进行了与df1相同的转换。 df1和df2是相同的,只是其中的值略有不同。

1
你需要使用 df[mixedorder(as.character(df$day)) ,] - akrun
编写可重现数据的代码会很有用 - 通常有帮助,因为人们可以粘贴一些代码并获得(虚拟)数据以进行测试。 - rg255
1个回答

4
mixedorder 提供了一个有序的索引,可用于对行进行排序。
df1 <- df[mixedorder(as.character(df$day)),]
df1
#     day sample1 sample2
#1  day0      22      11
#4  day2      21      13
#5  day8      20      17
#2 day11      23      15
#3 day15      25      14

目前尚不清楚OP正在编织什么。

library(tidyverse)
df1 %>%
    mutate(day = factor(day, levels = unique(day))) %>% 
    gather(key, val, -day) %>%
    ggplot(., aes(x = day, y = val, color = key)) + 
          geom_point() 

在此输入图片描述

数据

df <- structure(list(day = structure(1:5, .Label = c("day0", "day11", 
"day15", "day2", "day8"), class = "factor"), sample1 = c(22L, 
23L, 25L, 21L, 20L), sample2 = c(11L, 15L, 14L, 13L, 17L)), .Names = c("day", 
 "sample1", "sample2"), class = "data.frame", row.names = c(NA, 
-5L))

1
谢谢!看来我漏掉了初始的括号。但是,当我绘制数据时,会出现一个问题,即使将它们分配给新的数据框,它们仍以初始顺序绘制。 - Helpful_Triazole
@user1381852 是的,在R中,索引是行,列。如果您不提供索引,它会自动认为它是列索引。 - akrun
关于最新的评论,我的想法是你有一个名为 factor 的列,即使你改变顺序,这个因子的水平不会改变。所以你需要改变因子的水平,即 df1$day <- factor(df1$day, levels = unique(df1$day)) - akrun
即使根据@akrun的答案更改了索引并更改了行名称,图形在x轴上仍然不会改变。 - Helpful_Triazole
1
非常感谢@akrun提供的所有帮助。最终使用mutate完成了工作!我之前也不知道那个小小的%>%技巧,它在未来会非常有用。 - Helpful_Triazole
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接