从数据帧中随机抽样并输出到excel中

时间:2010-09-02 07:37:00

标签: r

我从数据框中随机抽取样本(a)我有。限定符a [,1]将导出为ex​​cel。但是我遇到了麻烦。

str(a)

'data.frame':   2299 obs. of  5 variables:
 $ A          : Factor w/ 2284 levels "01012223427",..: 1339 78 779 1590 1687 64 1034 633 1321 109 


a[sample(a[,1],300),]->q

这导致300个随机样本,但其中几个是NA。有什么想法吗?

q[,1]->r

str(r)
 Factor w/ 2284 levels "01012223427",..: 85 1162 1886 549 1996 789 185 321 632 2273

我需要将01012223427格式的r向量转换为excel,但执行write.csv(r,"r.csv")会在列的每个单元格中生成一个带有concactenated 1,“01012223427”等的文件。我尝试write.csv(as.numeric(r),"r.csv")对输出的因素本身没有帮助。我怎么能这样做?

- 修改

write.csv2(r,“300.csv”,row.names = F)解决了我的问题,但我仍然不确定NA为什么会被引入......

//中号

2 个答案:

答案 0 :(得分:5)

要将数字因子转换为数字,您必须先更改为字符,否则您将获得因子的内部数字,而不是级别标签:

as.numeric(as.character(r))

由于因子水平中的非数字字符,可能会引入NA。

答案 1 :(得分:1)

我还会先检查你为什么会有一个因素。在我看来,你从一些文本文件中读取它,并且在某处包含空格,或者文本(空格,点,制表符,字母NA,......)导致R看到整个列作为字符,并在使用read.csv或类似时将其转换为一个因子。

如果找到了,你也知道为什么得到NA,并且在将数据帧保存到文本文件之前可以对其进行修复。检查read.table()和read.csv()中的选项stringsAsFactors = F(或者,在read.csv中as.is = T)。

接下来,这段代码:

a[sample(a[,1],300),]->q

没有按照你的想法做我猜。我会使用索引本身,在以下行中使用:

a[sample.int(dim(a)[1],300),] -> q

如果a变为数字,则上面的代码将不再起作用。它将取一个[,1]的值,其中一个是01012223427.所以你会得到一个错误,因为没有该索引号的行。此外,当将[,1]作为字符传输时,您使用的代码将会中断。