将每个data.table列写入R中的单独文本文件

时间:2016-07-25 05:47:58

标签: r

我在一个data.table中读取了一个csv文件,如下所示:

      Cat1 Cat2 Cat3   Country   file_name
1:    A    E    B      Canada    first
2:    C    B           India     Second
3:    C                Canada    third
4:    B                Ireland   Fourth
5:    C    A           India     fifth
6:    A    C    F     Canada     Sixth

我使用以下代码将每行的内容写入单独的文本文件:

lapply(1:nrow(df), function(i) write.table(df[i], file= paste0("./TextFiles/", df[i, file_name], ".txt"), row.names = F, col.names = F, quote = F))

我现在得到的输出如下“Sixth.txt”(例如):

A C F Canada Sixth

但是,我希望文本如下:

Cat1
A

Cat2
C

Cat3
F

Country
Canada

有没有办法在不嵌套大量 lapply 的情况下获得此输出?

尝试代码:

lapply(df, function(i) i)

给出输出:

$Cat1
[1] "A" "C" "C" "B" "C" "A"

$Cat2
[1] "E" "B" ""  ""  "A" "C"

$Cat3
[1] "B" ""  ""  ""  ""  "F"

$Country
[1] "Canada"  "India"   "Canada"  "Ireland" "India"   "Canada" 

$file_name
[1] "first"  "Second" "third"  "Fourth" "fifth"  "Sixth" 

所以,我觉得可以在内容之前获取列的名称,也可以在每个列条目之前插入行。但是,我无法找到办法。

1 个答案:

答案 0 :(得分:0)

使用apply()函数将每一行设为列表,然后使用sink()循环内的for输出。然后检查您的工作目录以查看文件File1.txtFile2.txtFile3.txtFile4.txt。可以使用strsplit()提取文件名,并可以使用Result[[i]]$file_name

将其添加到文件输出中
  library(data.table)
  df <- data.frame(a=1:4,b=9:12,c=3:6,d=0:3)
  df <- data.table(df)

  df
  #    a  b c d
  # 1: 1  9 3 0
  # 2: 2 10 4 1
  # 3: 3 11 5 2
  # 4: 4 12 6 3

  Result = apply(df,1,as.list)


 for(i in 1:length(Result)){
 sink(paste("File",i,".txt",sep=""))
 Result[[i]]$file_name <- strsplit(paste("File",i,".txt",sep=""),"\\.")[[1]][1]
 print(Result[[i]])
 sink()
 }

enter image description here