R 对表循环中的行重新排序

R 对表循环中的行重新排序,r,R,我想更改循环中每个输出表中的行顺序 我目前正在使用lappy和dcast来获得一组表,我尝试在列表中设置所需的顺序,然后在列表中使用match()实现新的顺序 以下是我正在尝试的: #Setup data mtcars1 <- head(mtcars, 10) mtcars1$model <- rownames(mtcars1) df <- dplyr::bind_rows(mtcars1, mtcars1, mtcars1) df$year <- c(1975, 198

我想更改循环中每个输出表中的行顺序

我目前正在使用
lappy
dcast
来获得一组表,我尝试在列表中设置所需的顺序,然后在列表中使用
match()
实现新的顺序

以下是我正在尝试的:

#Setup data
mtcars1 <- head(mtcars, 10)
mtcars1$model <- rownames(mtcars1)
df <- dplyr::bind_rows(mtcars1, mtcars1, mtcars1)
df$year <- c(1975, 1983)
df$class <- c(2,2,2,3,3,3,4,4,4,4,2,2,2,3,3)

#Create set of tables
tables <- lapply(split(df, df$cyl), 
                 FUN = function(d) reshape2::dcast(model + class ~ year, 
                                                   value.var = "year", length , data = df))

tables

#My output has the rows arranged according to model alphabetical order, like this:

              model  class  1975 1983
1         Datsun 710     2    2    0
2         Datsun 710     4    1    0
3         Duster 360     2    2    0
4         Duster 360     4    1    0
5     Hornet 4 Drive     3    0    2
6     Hornet 4 Drive     4    0    1
7  Hornet Sportabout     3    2    0
8  Hornet Sportabout     4    1    0
9          Mazda RX4     2    2    0
10         Mazda RX4     3    1    0
11     Mazda RX4 Wag     2    0    2
12     Mazda RX4 Wag     4    0    1
13          Merc 230     3    2    0
14          Merc 230     4    1    0
15         Merc 240D     2    0    2
16         Merc 240D     4    0    1
17          Merc 280     3    0    2
18          Merc 280     4    0    1
19           Valiant     2    0    2
20           Valiant     3    0    1
我目前正在尝试的是:

#Reorder col1 names as desired

target <- c("Datsun 710", "Duster 360", "Hornet Sportabout", "Mazda RX4" , "Mazda RX4 Wag" , 
            "Merc 230", "Merc 240D", "Merc 280",  "Valiant", "Hornet 4 Drive")

table2 <- lapply(table1, FUN = function(x) 
          x[match(target, x$model), ])

table2

               model  class 1975 1983
1         Datsun 710     2    2    0
3         Duster 360     2    2    0
7  Hornet Sportabout     3    2    0
9          Mazda RX4     2    2    0
11     Mazda RX4 Wag     2    0    2
13          Merc 230     3    2    0
15         Merc 240D     2    0    2
17          Merc 280     3    0    2
19           Valiant     2    0    2
5     Hornet 4 Drive     3    0    2
#根据需要对col1名称重新排序

target如果我理解正确,那么问题是你“想把“大黄蜂4驱”模型放在桌子的末尾”。下面是一个示例,说明如何做到这一点:

df <- data.frame(num= 1:8, name= c("a", "a", "b", "b", "b", "c", "c", "d"), stringsAsFactors = FALSE)

name_last <- "b"

df <- rbind.data.frame(df[df$name != name_last, ], df[df$name == name_last, ])

df
  num name
1   1    a
2   2    a
6   6    c
7   7    c
8   8    d
3   3    b
4   4    b
5   5    b

df这应该是您正在寻找的:

tables_reordered<-lapply(tables, function (x) {rbind(x[which(!x$model=="Hornet 4 Drive"),], x[which(x$model=="Hornet 4 Drive"),])})

表格\u重新排序或者,这可以通过强制
模型
到因子,使用
forcats::fct\u relevel()
重新排列因子级别,并按因子级别排序来解决

lapply(tables, function(x) {
  x[order(forcats::fct_relevel(x$model, "Hornet 4 Drive", after = Inf)), ]
})

请写下你使用的所有软件包。这样可以更快地运行代码。
lapply(tables, function(x) {
  x[order(forcats::fct_relevel(x$model, "Hornet 4 Drive", after = Inf)), ]
})
$`4`
               model class 1975 1983
1         Datsun 710     2    2    0
2         Datsun 710     4    1    0
3         Duster 360     2    2    0
4         Duster 360     4    1    0
7  Hornet Sportabout     3    2    0
8  Hornet Sportabout     4    1    0
9          Mazda RX4     2    2    0
10         Mazda RX4     3    1    0
11     Mazda RX4 Wag     2    0    2
12     Mazda RX4 Wag     4    0    1
13          Merc 230     3    2    0
14          Merc 230     4    1    0
15         Merc 240D     2    0    2
16         Merc 240D     4    0    1
17          Merc 280     3    0    2
18          Merc 280     4    0    1
19           Valiant     2    0    2
20           Valiant     3    0    1
5     Hornet 4 Drive     3    0    2
6     Hornet 4 Drive     4    0    1

$`6`
               model class 1975 1983
1         Datsun 710     2    2    0
2         Datsun 710     4    1    0
3         Duster 360     2    2    0
4         Duster 360     4    1    0
7  Hornet Sportabout     3    2    0
8  Hornet Sportabout     4    1    0
9          Mazda RX4     2    2    0
10         Mazda RX4     3    1    0
11     Mazda RX4 Wag     2    0    2
12     Mazda RX4 Wag     4    0    1
13          Merc 230     3    2    0
14          Merc 230     4    1    0
15         Merc 240D     2    0    2
16         Merc 240D     4    0    1
17          Merc 280     3    0    2
18          Merc 280     4    0    1
19           Valiant     2    0    2
20           Valiant     3    0    1
5     Hornet 4 Drive     3    0    2
6     Hornet 4 Drive     4    0    1

$`8`
               model class 1975 1983
1         Datsun 710     2    2    0
2         Datsun 710     4    1    0
3         Duster 360     2    2    0
4         Duster 360     4    1    0
7  Hornet Sportabout     3    2    0
8  Hornet Sportabout     4    1    0
9          Mazda RX4     2    2    0
10         Mazda RX4     3    1    0
11     Mazda RX4 Wag     2    0    2
12     Mazda RX4 Wag     4    0    1
13          Merc 230     3    2    0
14          Merc 230     4    1    0
15         Merc 240D     2    0    2
16         Merc 240D     4    0    1
17          Merc 280     3    0    2
18          Merc 280     4    0    1
19           Valiant     2    0    2
20           Valiant     3    0    1
5     Hornet 4 Drive     3    0    2
6     Hornet 4 Drive     4    0    1