2017-02-17 14 views
0

私はRの初心者です。私は本当にこれであなたの助けに感謝します。 長いデータフレームをデータとメタデータのリストに分割する方法

Here'reいくつかのおもちゃの私の実際のデータのように見えるデータ:

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

データは3つの列があります:カテゴリ変数と係数欄、時間をコードする「インターバル」と呼ばれる列、および "従属変数を含む "value"これらはすべて、「カテゴリ」に属し、時間(「間隔」)ごとに「値」が変化する各観測の特性を表します。

 
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 
... 

さて、私はそれはのためのチャンスである2列

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

とtxtファイルに、各観測を抽出したいと別のtxtファイルにメタデータ

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

これまでに何を試しましたか? – Bulat

+0

'L = list(data [、2:3]、data [、1:2])' –

答えて

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) 
関連する問題