【问题标题】:Sorting dataframe by column of letters and numbers按字母和数字列对数据框进行排序
【发布时间】:2018-04-17 09:09:17
【问题描述】:

我一直在尝试使用下面列出的多种不同方法按第一列(或第一天)对我的数据框进行排序,但无济于事。我怀疑这可能是因为它试图按第一个数字排序,但我不确定如何更改它以使其正确排序行。数据集如下:

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)

mixedorder 仅输出数字索引。

当前代码:

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 是相同的,只是它们的值略有不同。

【问题讨论】:

  • 你需要df[mixedorder(as.character(df$day)) ,]
  • 生成可重复数据的代码会很有用 - 通常很有帮助,这样人们可以粘贴一些代码并使用(虚拟)数据进行测试

标签: r sorting dataframe rows


【解决方案1】:

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))

【讨论】:

  • 谢谢!我似乎错过了最初的括号。但是,当我绘制数据时,它会出现一个问题,因为即使在分配给新数据框之后,它也会以初始顺序绘制它们
  • @user1381852 是的,在 R 中,索引是 row,column。如果不提供索引,它会自动认为是列索引
  • @user1381852 关于更新的评论。我认为您有一个 factor 列,即使您更改顺序,因子的级别也不会更改顺序。所以,你必须改变因子水平,即df1$day &lt;- factor(df1$day, levels = unique(df1$day))
  • 是的,因此在尝试更改上述因素后,行保持相同的索引“名称”。他们目前是#1、#4、#5、#6、#2、#3。 (在第一个灰色列中)
  • 非常感谢@akrun 的所有帮助。变异最终完成了这项工作!这个 %>% 的小技巧我也不知道,将来会非常有用。
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2013-08-06
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多