如何将两行移动到 R 列表中数据框的顶部?
How move the two rows to top of data frame in a list in R?
有一个数据框列表,每个数据框都有不同的行和列。每个数据框的底部是总计和百分比行。我想将百分比行移动到列表的每个数据框中的顶部(第一行)和第二行。这是一个数据框示例:
structure(list(PROVINCE = c("31", "34", "35", "35", "36", "94",
"94", "94", "94", "94", "Total", "Percentage"), DISTRICT = c("71",
"4", "7", "73", "71", "71", "71", "71", "71", "71", "Total",
"Percentage"), SUB_DISTRI = c("90", "70", "290", "50", "20",
"21", "30", "40", "40", "40", "Total", "Percentage"), VILLAGE = c("5",
"3", "1", "2", "12", "3", "6", "1", "2", "4", "Total", "Percentage"
), X0_NA = c(0, 0, 0, 0, 0, 0, 0, 0, 9.5799999237061, 0, 1648.85999393463,
0.110249308880496), X767_Sa.u..Sahu..Sahu.u..Sau = c(0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 9.75, 0.000651923611185302), X805_Adihup..Atam..Borai..Hatam..Hattam..Mansim..Miriei..Tinam..Uran = c(0,
20.239999771118, 0, 0, 0, 0, 0, 0, 0, 0, 675.089997291566, 0.0451391906573737
), X814_Ajamaru..Atinjo..Mai.Brat..Maite..Majbrat..Maybrat..Mey.Brat = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3834.40999031067, 0.25638383668188
), X829_Arfak..Mansibaber..Meah..Mejach..Mejah..Meyach..Meyah = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 700.749998092649, 0.0468549199276567
), X859_Ayamaru..Brat..Maibrat = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 229.680000305176, 0.0153573143811273), X942_Fayu = c(0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 214.599998474121, 0.0143490057400625),
X978_Kajupulau..Kayupulau = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 36.1599998474122, 0.00241780078779332)), row.names = c(1L,
2L, 3L, 4L, 5L, 130L, 131L, 132L, 133L, 134L, 135L, 136L), class = "data.frame")
这里有两种方法:
# Calculating the row numbers
df[c(nrow(df), nrow(df)-1, 1:(nrow(df)-2)), ]
# Using `head` and `tail`
rbind(tail(df, 2)[2:1, ], head(df, -2))
泛化为一个函数,你可以这样做:
fun <- function(df) df[c(nrow(df), nrow(df)-1, 1:(nrow(df)-2)), ]
那么,你应该可以做到:
lapply(lst_of_df, fun)
演示
这是 list
行数不同的 data.frame
行。
set.seed(1)
nrows <- sample(7, 5, TRUE)
lst <- lapply(nrows, function(x) {
data.frame(row = c(paste0("row", seq_len(x)), "tot", "pct"),
v1 = seq_len(x+2))
})
要更改所有行的顺序,请使用:
lst2 <- lapply(lst, fun)
有一个数据框列表,每个数据框都有不同的行和列。每个数据框的底部是总计和百分比行。我想将百分比行移动到列表的每个数据框中的顶部(第一行)和第二行。这是一个数据框示例:
structure(list(PROVINCE = c("31", "34", "35", "35", "36", "94",
"94", "94", "94", "94", "Total", "Percentage"), DISTRICT = c("71",
"4", "7", "73", "71", "71", "71", "71", "71", "71", "Total",
"Percentage"), SUB_DISTRI = c("90", "70", "290", "50", "20",
"21", "30", "40", "40", "40", "Total", "Percentage"), VILLAGE = c("5",
"3", "1", "2", "12", "3", "6", "1", "2", "4", "Total", "Percentage"
), X0_NA = c(0, 0, 0, 0, 0, 0, 0, 0, 9.5799999237061, 0, 1648.85999393463,
0.110249308880496), X767_Sa.u..Sahu..Sahu.u..Sau = c(0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 9.75, 0.000651923611185302), X805_Adihup..Atam..Borai..Hatam..Hattam..Mansim..Miriei..Tinam..Uran = c(0,
20.239999771118, 0, 0, 0, 0, 0, 0, 0, 0, 675.089997291566, 0.0451391906573737
), X814_Ajamaru..Atinjo..Mai.Brat..Maite..Majbrat..Maybrat..Mey.Brat = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3834.40999031067, 0.25638383668188
), X829_Arfak..Mansibaber..Meah..Mejach..Mejah..Meyach..Meyah = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 700.749998092649, 0.0468549199276567
), X859_Ayamaru..Brat..Maibrat = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 229.680000305176, 0.0153573143811273), X942_Fayu = c(0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 214.599998474121, 0.0143490057400625),
X978_Kajupulau..Kayupulau = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 36.1599998474122, 0.00241780078779332)), row.names = c(1L,
2L, 3L, 4L, 5L, 130L, 131L, 132L, 133L, 134L, 135L, 136L), class = "data.frame")
这里有两种方法:
# Calculating the row numbers
df[c(nrow(df), nrow(df)-1, 1:(nrow(df)-2)), ]
# Using `head` and `tail`
rbind(tail(df, 2)[2:1, ], head(df, -2))
泛化为一个函数,你可以这样做:
fun <- function(df) df[c(nrow(df), nrow(df)-1, 1:(nrow(df)-2)), ]
那么,你应该可以做到:
lapply(lst_of_df, fun)
演示
这是 list
行数不同的 data.frame
行。
set.seed(1)
nrows <- sample(7, 5, TRUE)
lst <- lapply(nrows, function(x) {
data.frame(row = c(paste0("row", seq_len(x)), "tot", "pct"),
v1 = seq_len(x+2))
})
要更改所有行的顺序,请使用:
lst2 <- lapply(lst, fun)