[英]how to write into .txt file in R?
我有一個看起來像這樣的數據,例如:
A;a
B;a
C;b
D;c
A;b
A;d
C;c
....
第一個pos =鍵,第二個pos =值。 如果鍵; value,則為1,否則為0;
我將根據數據創建二進制矩陣。
a b c d
A 1 1 0 1
B 1 0 0 0
C 0 1 1 0
D 0 0 0 1
我可以創建矩陣,我的代碼:
KeyandValue = read.table('~/RStudioProjects/TestData.txt',sep=';',header = FALSE)
tableForData <- table(KeyandValue$V1,KeyandValue$V2)
tableForData[tableForData > 1] <- 1
csvFile<- write.table(tableForData,file =
"~/RStudioProjects/TestData.csv",quote = F,sep = ";")
write.csv(csvFile)
現在,我想以這種形式重寫為.txt格式:
A;a;1
A;b;1
A;c;0
A;d;1
B;a;1
B;b;0
B;c;0
B;d;0
.....
我的代碼:
t3<-tableForData[,]
View(t3)
我如何以這種形式寫入.txt文件?
library(data.table)
dt <- data.table("id" = c("A","B","C","D"),
"a" = c(1,1,0,0),
"b" = c(1,0,1,0),
"c" = c(0,0,1,0),
"d" = c(1,0,0,1))
dt_m <- melt.data.table(dt,id.vars = "id")
write.table(dt_m,"test.txt", sep=";",col.names = FALSE, row.names = FALSE)
在@MichaelChirico建議之后進行編輯
代替
write.table(dt_m,"test.txt", sep=";",col.names = FALSE, row.names = FALSE)
最好用
fwrite(dt_m,"test.txt", sep=";",col.names = FALSE, row.names = FALSE)
(為了更好地與OP保持一致而進行了編輯)
在基本R中,您可以使用as.data.frame.table
在一行中完成此操作:
df <- data.frame(
V1 = c("A", "B", "C", "D", "A", "A", "C"),
V2 = c("a", "a", "b", "c", "b", "d", "c"))
tableForData <- with(df, table(V1,V2))
tableForData[tableForData > 1] <- 1
t3 <- as.data.frame(tableForData) #this is the working part :)
那么t3是...
> head(t3)
V1 V2 Freq
1 A a 1
2 B a 1
3 C a 0
4 D a 0
5 A b 1
6 B b 0
如果行的順序很重要,則可以對其進行排序:
t3 <- t3[order(t3$V1),]
...並寫入文件:
write.table(t3, "afilename.csv", sep=";", col.names=FALSE, quote=FALSE, row.names=FALSE)
您可以使用reshape2::melt
將數據reshape2::melt
為所需的形式,然后保存不包含行名或列名的表。
df <- data.frame(lapply(1:4, function(i) sample(1:0, 4, replace=TRUE)))
colnames(df) <- letters[1:4]
rownames(df) <- LETTERS[1:4]
#> df
#
# a b c d
#A 1 0 1 0
#B 1 1 1 0
#C 1 0 1 1
#D 1 0 0 1
## Saving to disk
df$id <- rownames(df)
write.table(reshape2::melt(df), sep=";", col.names=FALSE, row.names=FALSE)
第三種選擇是使用提迪爾
library(tidyr)
library(dplyr)
library(tibble)
long_data = data.frame(X1=c("A", "B", "C", "D"), X2=c("a", "b", "c", "d"))
long_data %>%
spread(X1, 1) %>%
mutate_at(vars(-X2), funs(if_else(is.na(.), 0, 1))) %>%
column_to_rownames("X2") %>%
write.table(file="TestData.csv", quote=F, sep=";")
# A;B;C;D
# a;1;0;0;0
# b:0;1;0;0
# c;0;0;1;0
# d;0;0;0;1
expand.grid(long_data) %>%
left_join(long_data %>% mutate(val=1)) %>%
replace_na(list(val=0)) %>%
write.table(file="TestData2.csv", quote=F, sep=";")
# X1;X2;val
# A;a;1
# B;a;0
# C;a;0
# D;a;0
# A;b;0
# B;b;1
# C;b;0
# D;b;0
# A;c;0
# B;c;0
# C;c;1
# D;c;0
# A;d;0
# B;d;0
# C;d;0
# D;d;1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.