我从数据框中随机抽取样本(a)我有。限定符a [,1]将导出为excel。但是我遇到了麻烦。
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为什么会被引入......
//中号
答案 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]作为字符传输时,您使用的代码将会中断。