![](/img/trans.png)
[英]Subtracting a smaller data frame from a larger data-frame in R without unique row ID
[英]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.