簡體   English   中英

從R中較大的數據幀動態寫入文本文件

[英]Dynamically write text files from larger data-frame in R

我有一個數據框架,看起來像這樣:

df<-rbind(c(1,0,1,0,1,NA),c(1,0,0,1,1,NA),c(1,0,0,0,0,NA),c(1,1,1,1,1,NA),c( 2,0,1,1,1,1),c(2,1,1,0,0,0),c(2,0,0,0,0,1),c(2,1,1,1,1,1),c(2,0,0,0,0,0))
colnames(df)<-c("Team","A","B","C","D","E")
print(df)

Team    A    B    C    D    E
 1      0    1    0    1    NA
 1      0    0    1    1    NA
 1      0    0    0    0    NA
 1      1    1    1    1    NA
 2      0    1    1    1    1
 2      1    1    0    0    0
 2      0    0    0    0    1
 2      1    1    1    1    1
 2      0    0    0    0    0

我想將每個團隊結果動態地寫為一個文本文件,其中每個文件的名稱與團隊編號相對應,並且不使用NA來編寫(每個文件僅包含其各自的0和1。這樣最終結果看起來像

"1.txt"
 0    1    0    1 
 0    0    1    1 
 0    0    0    0 
 1    1    1    1
"2.txt"
 0    1    1    1    1
 1    1    0    0    0
 0    0    0    0    1
 1    1    1    1    1
 0    0    0    0    0

謝謝!

嘗試以下操作( df是您data.frame

df<- as.data.frame(rbind(c(1,0,1,0,1,NA),c(1,0,0,1,1,NA),c(1,0,0,0,0,NA),c(1,1,1,1,1,NA),c( 2,0,1,1,1,1),c(2,1,1,0,0,0),c(2,0,0,0,0,1),c(2,1,1,1,1,1),c(2,0,0,0,0,0)))
colnames(df)<-c("Team","A","B","C","D","E")

out <- split(df , f = df$Team)
n_teams <- length(unique(df$Team))
for (i in 1:n_teams) {
  eval(parse(text = paste0("write.table(out[[", i, "]], \"C:/Test/", i, ".txt\", sep=\"\t\",row.names=FALSE)")))
}

如果您發布可復制的數據,我可以進一步幫助您...

by函數對此很有幫助,它按因子級別拆分data.frame並將函數應用於每個組(請參見?by )。

在您的情況下,您可以使用以下方法:

by(df, df$Team, function(x)
  write.table(x, sep = "\t", file = paste0(unique(x$Team), ".txt")))

根據評論展開:

by(df, df$Team, function(x){

  # drop columns if all are NA
  subset <- x[,colSums(is.na(x)) < nrow(x)]

  # drop team column and write groups to individual files
  write.table(subset[,-1], sep = "\t", 
    file = paste0(unique(x$Team), ".txt"),
    col.names = FALSE, row.names = FALSE)

  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM