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

How to split a long data frame into lists of data & metadata

我是 R 的新手,无法解决这个相当基本的问题。非常感谢您对此的帮助。

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

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

数据将包含三列:包含分类变量的因子列、名为 "interval" 编码时间的列和包含因变量的 "value" 列。这些都表达了每个观察的属性,属于 "category" 并且随时间 "value" 变化 ("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
...

这是你尝试的机会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)