R 中使用 %in% 通配符的数据子集错误

Data Subset error in R using %in% wildcard

我的 df:

> str(merged)
'data.frame':   714 obs. of  9 variables:
 $ Date         : Date, format: "2013-03-29" "2013-03-29" "2013-03-29" "2013-03-29" ...
 $ patch        : Factor w/ 7 levels "BVG1","BVG11",..: 1 2 3 4 5 6 7 1 2 3 ...
 $ prod         : num  2.93 2.77 2.86 2.87 3.01 ...
 $ workmix_pct  : int  100 10 16 13 17 21 22 100 11 19 ...
 $ jobcounts    : int  9480 968 1551 1267 1625 1946 2123 7328 810 1374 ...
 $ travel       : num  30.7 34.3 33.8 29.1 28.1 24.9 34 31.8 32.7 36.4 ...
 $ FWIHweeklyAvg: num  1.63 4.48 3.1 1.36 1.55 ...
 $ CST.NAME     : Factor w/ 7 levels "Central Scotland",..: 4 2 3 1 5 7 6 4 2 3 ...
 $ month        : chr  "March" "March" "March" "March" ...

> head(merged)
        Date patch     prod workmix_pct jobcounts travel FWIHweeklyAvg              CST.NAME month
1 2013-03-29  BVG1 2.932208         100      9480   30.7      1.627024              Scotland March
2 2013-03-29 BVG11 2.769156          10       968   34.3      4.475714   Highlands & Islands March
3 2013-03-29 BVG12 2.857344          16      1551   33.8      3.098571   North East Scotland March
4 2013-03-29 BVG13 2.870111          13      1267   29.1      1.361429      Central Scotland March
5 2013-03-29 BVG14 3.011260          17      1625   28.1      1.550000   South East Scotland March
6 2013-03-29 BVG15 3.236246          21      1946   24.9      1.392857 West Central Scotland March

我正在尝试通过以下方式对补丁 BVG1 进行子集化:

data=merged[patch %in% c("BVG1"),]

但是出现错误:

Error in match(x, table, nomatch = 0L) : object 'patch' not found

不明白为什么...

我正在尝试使用 ggplot

为每个补丁绘制单独的时间序列

这是我试过的:

ggplot(data=merged, aes(x=merged$Date, y=merged$prod, group=patch)) + geom_line() + xlab("") + ylab("Weekly Prods")+ scale_x_date(labels = date_format("%b-%Y"),breaks = "1 month")

这在一张图上绘制了所有补丁...但我只想显示 BVG1 时间序列,这就是我正在尝试的:

ggplot(data=merged[patch %in% c("BVG1"),], aes(x=merged$Date, y=merged$prod, group=patch)) + geom_line() + xlab("") + ylab("Weekly Prods")+ scale_x_date(labels = date_format("%b-%Y"),breaks = "1 month")

但是出现同样的错误。

有什么想法吗?

更新

使用 [merged$patch %in% c("BVG1"),]

解决了问题

尝试

 data=merged[merged$patch %in% c("BVG1"),]

这应该可以解决您的问题。 patch 已在您的数据框中定义,因此您需要告诉 R 在哪里可以找到它。

此外,您可能希望查看 facet_wrap 而不是子集化。例如,将 + facet_wrap(~ patch) 添加到您的 plot 命令应该会立即显示所有补丁。我不确定这是你想要的输出,但我想我应该把它作为一个想法指出来......

你也可以

data <- subset(merged, patch == "BVG1")

由于您仅以 patch 作为单个值为条件,因此您不需要 %in%,您可以只测试是否相等。

当您使用 subset() 时,R 会自动解释在数据框上下文中引用的变量,因此 merged$patch 是不必要的。