我正在尝试学习R,但是遇到了一些(对我而言)意想不到的行为。我有4000个imdb电影的数据集。并希望按收视率和预算来排序前5名电影。我使用以下方法将此数据绑定到datsort
:
datsort <- arrange(dat, desc(imdb_score), budget)
然后获得使用标题按标题排序的前5个结果
head(datsort$movie_title,n=5)
基本上可以返回我的期望。
我得到的总返回数据是
[1] Towering Inferno
[2] The Shawshank Redemption
[3] The Godfather
[4] Kickboxer: Vengeance
[5] Dekalog
3928 Levels: #Horror [Rec] 2 [Rec] ... Zulu
不过,前5名电影的列表后面是:
3928 Levels: #Horror [Rec] 2 [Rec] ... Zulu
这似乎完全无关,因为它只是电影的完整列表,按字母顺序排序
我期望的只是
[1] Towering Inferno
[2] The Shawshank Redemption
[3] The Godfather
[4] Kickboxer: Vengeance
[5] Dekalog
从阅读文档和示例中,我从未见过附加的总列表。我在做什么错了?
答案 0 :(得分:1)
正如其他人所暗示的那样,您的movie_title
列已存储为一个因素。一个快速的解决方案是运行以下操作,该操作将在您的head
调用之前将您的列转换为字符。反过来,打印方法不会显示所有级别。
datsort$movie_title <- as.character(datsort$movie_title)
head(datsort$movie_title,n=5)
#[1] Towering Inferno
#[2] The Shawshank Redemption
#[3] The Godfather
#[4] Kickboxer: Vengeance
#[5] Dekalog
更好的是,当您读数据(或创建data.frame)时,请使用stringsAsFactors=FALSE
,如@phiver在注释中建议的那样。