如何将长数据帧拆分为数据列表&元数据

时间:2017-02-17 22:18:29

标签: r dplyr reshape2

我是R的相对新手,并且无法绕过这个相当基本的问题。我真的很感谢你的帮助。

这里有一些看起来像我的实际数据的玩具数据:

interval = rep(1:5,5)
value = runif(25)
category = c(rep("A", 10), rep("B", 15))
data = data.frame(category, interval, value)

数据将包含三列:一个带有分类变量的因子列,一个名为&#34的列; interval"编码时间和"值"包含因变量。这些都表达了每个观察的属性,属于"类别"并且"值"通过时间("间隔")。

category | interval | value;
A          1          1.0
A          2          2.3 
A          3          0.5
A          4          0.9
B          1          1.5
B          2          1.2
B          3          0.4
...

现在,我想将每个观察结果提取到一个包含两列的txt文件

interval | file.number
1          1.0
2          2.3
3          0.5
...

并在单独的txt文件中编码元数据

category | file.number
A          1
A          2
A          3
B          4 
B          5
B          6
...

1 个答案:

答案 0 :(得分:1)

您有机会试用mapply

df <- read.table(text ="category  interval  value
A          1          1.0
A          2          2.3 
A          3          0.5
A          4          0.9
B          1          1.5
B          2          1.2
B          3          0.4", header = T)

l <- split(df, df$interval)

#' Function writes interval data to csv
#' 
#' @return metadata about written records
writeIntervalData <- function(df, i) {
  write.csv(df, paste0("file", i, ".csv", row.names <- FALSE))
  meta <- data.frame(category = unique(df$category))
  meta$file <- i               
  return(meta)
}

meta <- mapply(writeIntervalData, l, names(l), SIMPLIFY = FALSE)

meta <- do.call("rbind", meta)
write.csv(meta[order(meta$category, meta$file),], "meta.csv", row.names = FALSE)