Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 仅显示ggplot2图表中的前3个条形图_R_Ggplot2_Subset - Fatal编程技术网

R 仅显示ggplot2图表中的前3个条形图

R 仅显示ggplot2图表中的前3个条形图,r,ggplot2,subset,R,Ggplot2,Subset,我试图找到一种只显示数据集顶部三个栏的方法。为了使事情变得简单,我使用钻石数据集来说明我想做什么。首先,我按从大到小的顺序订购 library(data.table) diamonds <- data.table(diamonds) diamonds1 <- within(diamonds, cut <- factor(cut, levels=names(sort(table(cut), decreasing=TRUE)))) 我得到了这个: 但是我不想看所有的酒吧,我只想看

我试图找到一种只显示数据集顶部三个栏的方法。为了使事情变得简单,我使用钻石数据集来说明我想做什么。首先,我按从大到小的顺序订购

library(data.table)
diamonds <- data.table(diamonds)
diamonds1 <- within(diamonds, cut <- factor(cut, levels=names(sort(table(cut), decreasing=TRUE))))
我得到了这个:

但是我不想看所有的酒吧,我只想看前三名。此外,我希望这是可重复的,因此如果数据集发生变化,并且存在不同的前三名,我可以使用相同的代码创建正确的前三名。有什么方法可以做到这一点吗?

当然,您可以定义xlim。加:

在@Arun comments之后编辑:更直接的方法是在将数据提供给ggplot之前对其进行子集。您可以使用data.table的功能使其非常快速

setkey(diamonds, cut)  ## needed for fast subsetting and grouping
tt <- diamonds[, list(count=.N), by=cut]  ## same as table(diamonds$cut) but faster    
cut.values <- tt[order(count), cut][1:3]  ## select top 3 cut values by count
ggplot(diamonds[J(cut.values)], ...       ## run the same plot commands on subset of data
当然,您可以定义xlim。加:

在@Arun comments之后编辑:更直接的方法是在将数据提供给ggplot之前对其进行子集。您可以使用data.table的功能使其非常快速

setkey(diamonds, cut)  ## needed for fast subsetting and grouping
tt <- diamonds[, list(count=.N), by=cut]  ## same as table(diamonds$cut) but faster    
cut.values <- tt[order(count), cut][1:3]  ## select top 3 cut values by count
ggplot(diamonds[J(cut.values)], ...       ## run the same plot commands on subset of data

我对所有数据操作都使用data.table,因此,如果在绘制图形之前必须在数据中完成某个解决方案,我更喜欢使用data.table。因此,tag.I使用data.table进行所有数据操作,因此,如果在绘制图形之前必须在数据中完成某个解决方案,我希望它使用data.table。因此,标签。我在我原来的帖子中添加了一个注释,但我正在寻找一种方法来完成它,以便将来可以自动完成它。我不能保证理想、优质和非常好永远是前三名,所以我想有一个解决方案,它将始终为我提供前三名。我猜你希望频率最高的3个酒吧成为前三名。在这种情况下,您可以使用namesorttablecut提取它们,当我这样做时,它也会给我一个表示NA的条。有没有关于从那里开始的建议?namessorttablecut,Desculation=TRUE[1:3]返回什么?不知道为什么会有回报。@Arun谢谢你的提示。我对函数有很好的掌握。我的意思是为什么他们会在这种情况下退回它。如果有3个以上的级别,这应该会返回OP想要的内容。我用模拟数据对它进行了测试,只是为了确定。我在我的原始帖子中添加了一个注释,但我正在寻找一种方法来实现它,以便将来可以自动完成它。我不能保证理想、优质和非常好永远是前三名,所以我想有一个解决方案,它将始终为我提供前三名。我猜你希望频率最高的3个酒吧成为前三名。在这种情况下,您可以使用namesorttablecut提取它们,当我这样做时,它也会给我一个表示NA的条。有没有关于从那里开始的建议?namessorttablecut,Desculation=TRUE[1:3]返回什么?不知道为什么会有回报。@Arun谢谢你的提示。我对函数有很好的掌握。我的意思是为什么他们会在这种情况下退回它。如果有3个以上的级别,这应该会返回OP想要的内容。我用模拟数据测试了它,只是为了确定。
setkey(diamonds, cut)  ## needed for fast subsetting and grouping
tt <- diamonds[, list(count=.N), by=cut]  ## same as table(diamonds$cut) but faster    
cut.values <- tt[order(count), cut][1:3]  ## select top 3 cut values by count
ggplot(diamonds[J(cut.values)], ...       ## run the same plot commands on subset of data