我有一个名为metadata.csv的文件,我想加载到R并转换为一个因子。 我从以下开始:
metadata <- read.csv(file="metadata.csv", header=T, stringsAsFactors=T)
这样就可以很好地加载CSV了。我在这里打印出元数据:
> metadata
Filename Genre Date Gender
1 Austen_Emma.txt Social Early Female
2 Bronte_Eyre.txt Social Middle Female
3 Dickens_Expectations.txt Social Late Male
4 Eliot_Mill.txt Social Late Female
5 Lewis_Monk.txt Gothic Early Male
6 Radcliffe_Italian.txt Gothic Early Female
7 Shelley_Frankenstein.txt Gothic Middle Female
8 Stoker_Dracula.txt Gothic Late Male
9 Thackeray_Vanity.txt Social Middle Male
10 Trollope_Vicar.txt Social Middle Male
现在我想将其转换为一个因素:
as.factor(metadata)
这给了我以下错误:
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
答案 0 :(得分:5)
metadata
是一个数据帧,它是由长度相等的向量组成的特殊类型的列表。您只能在向量上使用as.factor()
。因此,您必须在数据框中的每个向量上分类as.factor()
。这可以使用lapply
函数完成:
metadata <- data.frame(lapply(metadata, factor))
这会将每列转换为一个因子(通过class(metadata[, 1])
检查)。 metadata
的整体结构仍然是数据框。
答案 1 :(得分:2)
read.csv
将数据放入data.frame
您无法将data.frame
转换为factor
。这是非常基本的R内容。
这就像你试图通过将计算机转换为PDF来将一堆.doc文件更改为PDF。它没有意义。
错误是询问“您是否在列表中调用了排序?”是的,你有。 as.factor
拨打sort
,您的data.frame
就是一个列表。