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

时间:2016-06-27 09:52:55

标签: r list dataframe row col

我需要你的帮助:

  • 删除列表中包含的所有数据框中的最后一行 和
  • 向包含第一行值的所有数据框添加新列。

这是我的一个数据框的示例:

         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个数据帧。

由于 保罗

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果您的所有数据帧看起来都相同,则可以使用类似的内容:

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或apply-solution,或者甚至编写你自己的函数。

我希望它有所帮助。