R 子集正在删除太多行

R 子集正在删除太多行,r,subset,R,Subset,鉴于以下数据: # Import mock data Biomass <- c(20, 10, 5, 4, 5, 7, 8, 22, 13, 13, 15, 18, 2, 5, 7, 10) Season <- c("Winter", "Spring", "Summer", "Fall") Year <- c("1", "2", "3", "4") ReefSpecies <- c("Admiral Ma", "Jaap Mf", "Grecian Ma", "Allig

鉴于以下数据:

# Import mock data
Biomass <- c(20, 10, 5, 4, 5, 7, 8, 22, 13, 13, 15, 18, 2, 5, 7, 10)
Season <- c("Winter", "Spring", "Summer", "Fall")
Year <- c("1", "2", "3", "4")
ReefSpecies <- c("Admiral Ma", "Jaap Mf", "Grecian Ma", "Alligator Mr", "Jaap Mf", "Grecian Ma", "Alligator Mr", "Admiral Ma", "Grecian Ma", "Alligator Mr", "Admiral Ma", "Jaap Mf", "Alligator Mr", "Admiral Ma", "Jaap Mf","Grecian Ma")
Seasonal <- data.frame(Biomass, Season, Year, ReefSpecies)
Seasonal$Times <- paste(Seasonal$Year, Seasonal$Season, sep=" ")
Seasonal$Time <- factor(Seasonal$Times, levels=unique(Seasonal$Times))


# Plot figure
ggplot(data = Seasonal, aes(Time,  Biomass, color=ReefSpecies)) + 
geom_point() +
geom_smooth(aes(group=ReefSpecies), method="lm") +
theme(axis.text.x = element_text(angle = 270)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
      panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) +
theme(legend.position = "top") +
xlab("Year") +
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")"))
这是我想要的第一幅图的一个例子——它包括所有相同的物种,但也来自我所有的研究地点

此外,我收到了这个警告消息——我认为这意味着它试图为子集绘制相同数量的点,但R警告对我来说几乎是一门外语

Warning message:
In ReefSpecies == c("Grecian O. faveolata", "Jaap O. faveolata",  :
  longer object length is not a multiple of shorter object length

这是我想要的第一幅图的一个例子——它包括所有相同的物种,但也来自我所有的研究地点

同样的警告信息也出现在这个图中

:子集图中的红线对应于整个数据图中的金线

# Whole Dataset
ggplot(data = Seasonal, aes(Time,  Biomass, color=ReefSpecies)) + 
geom_point() +
geom_smooth(aes(group=ReefSpecies), method="lm") +
theme(axis.text.x = element_text(angle = 270)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
      panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) +
theme(legend.position = "top") +
xlab("Year") +
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")"))
子集图中的蓝线对应于整个数据图中的蓝线

# Whole Dataset
ggplot(data = Seasonal, aes(Time,  Biomass, color=ReefSpecies)) + 
geom_point() +
geom_smooth(aes(group=ReefSpecies), method="lm") +
theme(axis.text.x = element_text(angle = 270)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
      panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) +
theme(legend.position = "top") +
xlab("Year") +
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")"))
子集图中的绿线对应于整个数据图中的绿线

# Whole Dataset
ggplot(data = Seasonal, aes(Time,  Biomass, color=ReefSpecies)) + 
geom_point() +
geom_smooth(aes(group=ReefSpecies), method="lm") +
theme(axis.text.x = element_text(angle = 270)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
      panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) +
theme(legend.position = "top") +
xlab("Year") +
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")"))
子集图中的紫色线对应于整个数据图中的紫色线

# Whole Dataset
ggplot(data = Seasonal, aes(Time,  Biomass, color=ReefSpecies)) + 
geom_point() +
geom_smooth(aes(group=ReefSpecies), method="lm") +
theme(axis.text.x = element_text(angle = 270)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
      panel.background = element_rect(colour="black", size=1, fill=NA), axis.line = element_line(colour = "black")) +
theme(legend.position = "top") +
xlab("Year") +
ylab(bquote("Ash-free Biomass (mg/cm"^"2"*")"))
从这两幅图中可以看出,绘制子集时,ggplot似乎删除了图中的多个点


任何帮助都将不胜感激,如果您还需要我的帮助,请告诉我,并提前感谢您

比较不同长度的向量时,会循环使用较短的向量以匹配较长向量的长度,然后进行元素级比较。下面是一个小例子:

x <- c(1, 1, 0, 0, 2)
y <- c(1, 0)

# compare x with a shorter vector y
x == y
#   [1]  TRUE FALSE FALSE  TRUE FALSE

# the previous is actually the same as
x == c(y, y, y[1])
x == c(1, 0, 1, 0, 1)
#   [1]  TRUE FALSE FALSE  TRUE FALSE

# to check for each element of x if it matches any element in y
x %in% y
#   [1]  TRUE  TRUE  TRUE  TRUE FALSE

x使用%
中的
%而不是
=
子集中的
来检查
ReefSpecies
是否与指定的任何名称匹配。@MikkoMarttila我试过了,但它说找不到函数,我在eval(expr,envir,enclose)中得到了这个错误
错误:找不到函数“%n%”
@MikkoMarttila忽略最后的评论-这确实有效!非常感谢。我需要尝试
%in%
而不是
%n%
作为对未来的一点建议-在解决问题之前先缩小问题的范围。这不是一个
ggplot
问题,也不是一个绘图问题。这是一个如何对数据进行子集的问题。如果您看到一个看起来不正确的绘图,您应该做的第一件事是检查您提供给绘图的数据框是否正确。在本例中,情况并非如此,您已将问题缩小为一行代码。请参阅。他们完全不同。使子集与
==
一起工作的方法是
子集(季节性,ReefSpecies==“Gregcian O.faveolata”| ReefSpecies=“Jaap O.faveolata”| ReefSpecies==…)