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
是不必要的。
我的 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
是不必要的。