0

我有一个名为 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?
4

2 回答 2

5

metadata is a dataframe which is a special type of list made up of vectors of equal length. You can only use as.factor() on vectors. Therefore you must class as.factor() on each vector in the dataframe. This can be done using the lapply function:

metadata <- data.frame(lapply(metadata, factor))

This will convert each column to a factor (check this by class(metadata[, 1])). The overall structure of metadata will still be a dataframe.

于 2013-11-07T17:08:38.703 回答
2

read.csv将数据放入 data.frame

您不能将 adata.frame转换为factor. 这是非常基本的 R 东西。

这就像您试图通过将计算机转换为 PDF 来将一堆 .doc 文件更改为 PDF。这没有任何意义。

错误是询问“您是否在列表上调用了排序?” 是的,你有。as.factor来电sort,你的data.frame就是一个列表。

于 2013-11-07T17:11:27.763 回答