R中使用%in wildcard中的数据子集错误

时间:2015-03-17 20:02:57

标签: r ggplot2 line time-series

我的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"),]

解决了问题

2 个答案:

答案 0 :(得分:2)

您也可以

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

由于您只对patch作为单一值进行了调整,因此您不需要%in%,您只需测试是否相等。

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

答案 1 :(得分:1)

尝试

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

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

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