R 按数字对系数变量重新排序时出现问题

R 按数字对系数变量重新排序时出现问题,r,ggplot2,R,Ggplot2,数据:这是按鲨鱼种类分类的鲨鱼事件。这实际上是一个真实的数据集,已经总结过了 require(ggplot2) 通过一个数字对因子变量重新排序,生成一个新变量 head(D) # FL_FATAL spec N Especies # 1 NO FATAL white 368 white # 2 NO FATAL tiger 169 tiger # 3 NO FATAL bull 120 bull # 4

数据:这是按鲨鱼种类分类的鲨鱼事件。这实际上是一个真实的数据集,已经总结过了

require(ggplot2)
通过一个数字对因子变量重新排序,生成一个新变量

head(D)
#   FL_FATAL       spec   N   Especies
# 1 NO FATAL      white 368      white
# 2 NO FATAL      tiger 169      tiger
# 3 NO FATAL       bull 120       bull
# 4    FATAL      white 107      white
# 5 NO FATAL unconfired  78 unconfired
# 6 NO FATAL      nurse  77      nurse

使用
reorder()。你们大多数物种都有一个
N
值(仅限无致命值),但也有少数物种同时有致命值和无致命值。每当有两个以上的数值行对应一个系数时,
reorder
使用这些数值的函数进行最终排序。默认函数是
mean
,但您可能希望
sum
按事件总数排序

# Using reorder isn't working or am i missing something?
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) + 
  geom_point(aes(size = N, color = FL_FATAL))

# adding facets makes it worse
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) + 
  geom_point(aes(size = N, color = FL_FATAL)) +
  facet_grid(. ~ FL_FATAL)

D$spec\u order我很惊讶你喜欢你的第一种方式——这是一个令人高兴的巧合。你们大多数物种都有一个
N
值(仅限无致命值),但也有少数物种同时有致命值和无致命值。每当有两个以上的数值行对应一个系数时,
reorder
使用这些数值的函数进行最终排序。默认函数是
mean
,但您可能希望
sum
按事件总数排序

# Using reorder isn't working or am i missing something?
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) + 
  geom_point(aes(size = N, color = FL_FATAL))

# adding facets makes it worse
ggplot(D, aes(x=N, y=reorder(D$spec, D$N))) + 
  geom_point(aes(size = N, color = FL_FATAL)) +
  facet_grid(. ~ FL_FATAL)

D$spec\u order问题在于,通过在重新排序调用中使用
D$
,您对
spec
进行了重新排序,与数据帧无关,因此这些值不再与相应的
x
值匹配。您需要直接在变量上使用它:

D$spec_order <- reorder(D$spec, D$N, sum)
ggplot(D, aes(x=N, y=spec_order)) + 
  geom_point(aes(size = N, color = FL_FATAL))

ggplot(D, aes(x=N, y=spec_order)) + 
  geom_point(aes(size = N, color = FL_FATAL)) +
  facet_grid(. ~ FL_FATAL)

问题是,通过在重新排序调用中使用
D$
,您正在重新排序
spec
,与数据帧无关,因此值不再与相应的
x
值匹配。您需要直接在变量上使用它:

D$spec_order <- reorder(D$spec, D$N, sum)
ggplot(D, aes(x=N, y=spec_order)) + 
  geom_point(aes(size = N, color = FL_FATAL))

ggplot(D, aes(x=N, y=spec_order)) + 
  geom_point(aes(size = N, color = FL_FATAL)) +
  facet_grid(. ~ FL_FATAL)

我懂了。你的第一个情节是一个更好的选择比那些工作。然而,我不确定分面的情节是否正确<代码>D[D$spec==“white”,]
白鲨物种应该有475起事故。顺便说一句,数据是正确的,它已经被聚合,选择了N>10的实例。@MartínBel我并不怀疑你数据的正确性——只是因为致命事件要低得多,所以在只有少数物种有致命计数的情况下,取致命和非致命的平均值真的是丢人现眼。(虽然我认为你的数据中确实有输入错误,“未确认”而不是“未确认”)。至于正确性,@andyteucher正确地诊断出了这个问题。。。在我的测试中,我添加了一个列,其中包含重新排序代码,而不是在
ggplot
调用中添加,这确实会产生影响(编辑为正确)。Thx@shujaa,谢谢您的评论和回答。这真的很有用。与我以前做的相比,使用reorder做这件事要好得多。当然,未经证实/未经证实不是鲨鱼物种!原始数据集真的很乱,很难清理。我会解决的,我明白了。你的第一个情节是一个更好的选择比那些工作。然而,我不确定分面的情节是否正确<代码>D[D$spec==“white”,]
白鲨物种应该有475起事故。顺便说一句,数据是正确的,它已经被聚合,选择了N>10的实例。@MartínBel我并不怀疑你数据的正确性——只是因为致命事件要低得多,所以在只有少数物种有致命计数的情况下,取致命和非致命的平均值真的是丢人现眼。(虽然我认为你的数据中确实有输入错误,“未确认”而不是“未确认”)。至于正确性,@andyteucher正确地诊断出了这个问题。。。在我的测试中,我添加了一个列,其中包含重新排序代码,而不是在
ggplot
调用中添加,这确实会产生影响(编辑为正确)。Thx@shujaa,谢谢您的评论和回答。这真的很有用。与我以前做的相比,使用reorder做这件事要好得多。当然,未经证实/未经证实不是鲨鱼物种!原始数据集真的很乱,很难清理。我会搞定的,太好了!两个答案都很有用!完美的两个答案都很有用!
ggplot(D, aes(x=N, y=reorder(spec, N, sum))) + 
  geom_point(aes(size = N, color = FL_FATAL)) +
  facet_grid(. ~ FL_FATAL)