在R

时间:2017-11-14 21:01:21

标签: r write.table

我有两个不同大小的数据帧要输出到.txt文件中。 我一直在使用write.table函数,但我只能在.txt文件中输出一个。

dataframe1=data.frame(x=c(1:10), y=c(1:10), z=c(1:10))
dataframe2=data.frame(a=c(1:5), b=c(1:5)) 
write.table( C(dataframe1,dataframe2),
             file = "dataframes.txt", 
             append = F,
             sep = ",",
             row.names = F,
             col.names = F,
             na="",
             quote = F)

我试图将它们叠加在一起,但它无法正常工作。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题。

首先,C(dataframe1,dataframe2)会因为使用大写字母C而产生错误。

其次,c(dataframe1,dataframe2)输出一个包含5个项目的列表。这不是数据框架或矩阵。保存时,这将被强制转换为矩阵。任何缺少数据的行都将自动填充,您可能不需要。这将导致您的代码输出:

1,1,1,1,1
2,2,2,2,2
3,3,3,3,3
4,4,4,4,4
5,5,5,5,5
6,6,6,1,1
7,7,7,2,2
8,8,8,3,3
9,9,9,4,4
10,10,10,5,5

这里的问题是你试图连接两个具有不同列数的不同数据帧。您可以将它们作为一个大表一起绑定并保存。但请注意,任何丢失的行数据都可能会自动填充,而您不想要(a和b只有5行,而xyz只有10行)。

write.table( cbind(dataframe1,dataframe2),
              file = "dataframes.txt", 
              append = F,
              sep = ",",
              row.names = F,
              col.names = T,
              na="",
              quote = F)

将输出:

x,y,z,a,b
1,1,1,1,1
2,2,2,2,2
3,3,3,3,3
4,4,4,4,4
5,5,5,5,5
6,6,6,1,1
7,7,7,2,2
8,8,8,3,3
9,9,9,4,4
10,10,10,5,5

或者如果你真的希望它们彼此叠加,你可以使用单独的调用并打开追加。

write.table( dataframe1,
              file = "dataframes.txt", 
              append = F,
              sep = ",",
              row.names = F,
              col.names = T,
              na="",
              quote = F)
write( "\n Next Dataframe \n", file = "dataframes.txt", append = T)
write.table( dataframe2,
              file = "dataframes.txt", 
              append = T,
              sep = ",",
              row.names = F,
              col.names = T,
              na="",
              quote = F)

Which will output: 
x,y,z
1,1,1
2,2,2
3,3,3
4,4,4
5,5,5
6,6,6
7,7,7
8,8,8
9,9,9
10,10,10

 Next Dataframe 

a,b
1,1
2,2
3,3
4,4
5,5