r llply lapply使用而不会丢失数据帧名称

时间:2014-02-14 12:13:42

标签: r plyr lapply names

总体情况

我的测量设备的界面无法保存任何其他信息,但在测量其值时会生成csv的名称。所以我使用了一套系统的缩写来解释参数的变化,例如浓度,酶,饲料,缓冲液等。这组合形成了我的csv文件的标题,形成了data.frames的名称,我现在在哪里试图读出名称,将它们与其他数据结合起来,形成可用于回归的表格。

问题:

我刚注意到我在列表中丢失了data.frames的名字, 我可以在每次调用lapply之后重命名它们,但这并不是一个合适的解决方案。

我找到了使用llply的建议,但我不能教它保留名字。

# loads plyr package
library(plyr)

# generates a showcase list of dataframes, 
data <- list(data.frame(c(1,2),c(3,3)),data.frame(c(1,2),c(3,3)),data.frame(c(1,2),c(3,3)),data.frame(c(1,2),c(3,3)))

# assigns names to dataframe
names(data) <- list("one","two", "tree", "four")

使用数据帧名称将“o”传递给一列,这部分工作正常, 但在运行它之后,名字就丢失了

data <- lapply(X = seq_along(data), 
  FUN = function(i){    
  x <- data[[i]]
  if (gsub("([(a-z)]).*","\\1", names(data)[i]) == "o") {x$enz <- "o"}
  return(x)}, 
  USE.NAMES = TRUE)  

llply相同,按预期运行,但不保留名称,尽管我认为我可以解决该特定问题(引用:“llply等同于lapply,但它会保留标签并可以显示进度条。“)

data <- llply(seq_along(data), function(i){    
                 x <- data[[i]]
                 if (gsub("([(a-z)]).*","\\1", names(data)[i]) == "o") {x$enz <- "o"}
                 return(x)})  

我非常感谢提示如何解决这个问题,如

name(data) <- list.with.the.names

在每次llply ore lapply电话之后。

1 个答案:

答案 0 :(得分:0)

做这样的事情:

for (i in seq_along(data)) data[[i]]$name <- names(data)[i]

do.call(rbind, data)
#       c.1..2. c.3..3. name
#one.1        1       3  one
#one.2        2       3  one
#two.1        1       3  two
#two.2        2       3  two
#tree.1       1       3 tree
#tree.2       2       3 tree
#four.1       1       3 four
#four.2       2       3 four

从那里继续。