r - 如何将两行移动到 R 列表中数据框的顶部?

标签 r list row

有一个数据框列表,每个数据框都有不同的行和列。每个数据框的底部是总计行和百分比行。我想将百分比行移至列表的每个数据框中的顶部(第一行)和总第二行。这是一个数据框示例:

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)

演示

这是具有不同行数的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)

关于r - 如何将两行移动到 R 列表中数据框的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65334462/

相关文章:

r - 在 igraph 中存储顶点的顺序

r - 如何过滤部分日期然后更改该部分?

java - ArrayList 中的弹跳球需要检测碰撞

r - 如何计算所选列的行平均值

android - 根据 Android 设备中的屏幕高度使行的高度相等

r - 如何从 R 中的流式 mapreduce 作业中获取文件名?

r - (函数(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : Arguments imply different number of rows: 1, 4, 5, 2

css - 在div中添加更多文字时,如何将2张图片并排放置而不移动?

list - 有没有办法只对 Prolog 中包含字母和整数的对列表中的整数求和?

list - 使用递归混合来自两个列表的值