R - 删除最后一行并转换列表中数据框中列中的行

R - remove last row and convert row in column in dataframes within a list

我需要你的帮助,因为我必须:

这是我的数据帧之一的示例:

         V1        V2        V3
2         7002                    
8  14 Feb 1959    47.664     1.310
9  25 Aug 1960   680.615     3.790
10 08 Aug 1961   287.893     2.490
11 11 Feb 1962   405.366     2.920
12 14 Dec 1962   312.010     2.560
13 18 Aug 1964   167.684     1.930

    [....]

53 19 Jan 2004   385.980     2.835
54 13 Jun 2005   415.942     2.939
55 26 Nov 2005   280.773     2.431
56       [END]     

因此,在这种情况下,添加 7002 作为新列并删除第 56 行。 我的列表中有 ~290 个数据帧。

谢谢 保罗

我们可以使用 lapply 遍历 list,删除最后一行 (x[-nrow(x),]),并使用第一个单元格值创建一个新列。

lst1 <- lapply(lst, function(x) transform(x[-nrow(x),], NewCol = x[1,1]))

如果您所有的数据框看起来都一样,您可以使用类似的东西:

df1 <- data.frame(matrix(data =  (rnorm(9)), 3, 3))
df2 <- data.frame(matrix(data =  (100:108), 3, 3))
colnames(df1) <- c("V1", "v2", "V3")
colnames(df2) <- c("V1", "v2", "V3")

list1 <- list(df1, df2)
list2 <- list1

for(i in 1:length(list2)) {
  list2[[i]] <- list2[[i]][-length(list2[[i]]), ]
  colnumber <- dim(list2[[i]])[2] + 1
  list2[[i]]$V4 <- list2[[i]][1, 1]
}

list2

但是,如果您有一个更复杂的结构,或者每个数据帧中的值不在同一位置,您将不得不寻找 dplyr 或应用解决方案,甚至为此编写自己的函数。

希望对您有所帮助。