在dplyr序列中使用data.frame返回函数

时间:2014-12-15 02:38:34

标签: r dplyr

我想使用dplyr中的data.frame返回函数来读取我想要轻松配置其位置的Excel文件中的数据。在这里,我使用简化的get_table()函数和两个生成的data.frames来表达我的问题。实际上,get_table()函数从服务器获取数据并对其进行解析。

从dplyr调用函数时,应合并所有data.frame结果。这是简化的代码:

files <- read.table(header=T, text='
  type      filename
  A         A_table
  B         B_table
')

A_table <- read.table(header=T, text='
  area      observations
  K1        5
  K2        9
')

B_table <- read.table(header=T, text='
  area      observations
  K1        23
  K2        28
  K3        1
')

get_table <- function(name) {
  return(get(name))
}

我可以用lapply读取文件:

list <- as.vector(files[,2])
t <- lapply(list, get_table)
do.call("rbind", t)

并将结果合并到:

  area observations
1   K1            5
2   K2            9
3   K1           23
4   K2           28
5   K3            1

但是我想学习dplyr风格做同样的事情(但是工作 - 这不会):

files %>%
  select(filename) %>%
    rowwise() %>% 
      get_table()

1 个答案:

答案 0 :(得分:2)

如@Richard Scriven所述,filename应该是性格。

files <- read.table(header=T, stringsAsFactors=FALSE, text='
  type      filename
  A         A_table
  B         B_table
')

do应用于代码的最后一行,可获得与lapply(files[ ,2], get) %>% rbind_all相同的结果。

files %>%
  rowwise() %>% 
  do(get_table(.$filename))

#Groups: <by row>

#  area observations
#1   K1            5
#2   K2            9
#3   K1           23
#4   K2           28
#5   K3            1