为了简化代码并使代码可重复,我有以下循环代码,旨在对数据帧进行子集并将每个子集存储在新变量中。
types <- c("POINT", "NONPOINT", "ON-ROAD", "NON-ROAD")
for (i in seq_along(types)) {
paste("type", types[i], sep = "") <- filter(NEI$Emissions, NEI$type == types[i])
}
我希望循环将每个子集(4个子集)存储在一个名为“ type”的新变量和相应的字符串中。取而代之的是,我收到以下错误:
“ UseMethod(” filter_“)中的错误: 没有适用于“ filter_”的适用方法应用于类“ c('double','numeric')”的对象
我已经尝试通过as.character(types)
将类型强制为字符串的类修改,但是没有成功。
编辑:head(NEI)
的输出如下:
fips SCC Pollutant Emissions type year
4 09001 10100401 PM25-PRI 15.714 POINT 1999
8 09001 10100404 PM25-PRI 234.178 POINT 1999
12 09001 10100501 PM25-PRI 0.128 POINT 1999
16 09001 10200401 PM25-PRI 2.036 POINT 1999
20 09001 10200504 PM25-PRI 0.388 POINT 1999
24 09001 10200602 PM25-PRI 1.490 POINT 1999
答案 0 :(得分:0)
你想做的是
types <- c("POINT", "NONPOINT", "ON-ROAD", "NON-ROAD")
for (i in types) {
assign(paste0("type", i), filter(NEI, NEI$type == i))
}
这将为您提供基于types
的4个数据帧
在mtcars
数据集上尝试
cyl <- unique(mtcars$cyl)
for (i in cyl) {
assign(paste0("type", i), filter(mtcars, mtcars$cyl == i))
}
type6
# mpg cyl disp hp drat wt qsec vs am gear carb
#1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
#2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
#3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
#4 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
#5 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
#6 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
#7 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
以及其他类似的数据帧。
您的解决方案不起作用的原因是,您试图将值分配给可以通过复制来复制的字符
paste0("type", types[1]) <- filter(mtcars$mpg, mtcars$cyl == 4)
UseMethod(“ filter_”)中的错误: 没有适用于“ filter_”的适用方法应用于类“ c('double','numeric')”的对象
但是,using assign
is bad(如注释中所述)可以使用split
,它会为您提供数据帧列表。
new_data <- split(NEI, NEI$type)
,然后通过执行new_data[[1]]
,new_data[[2]]
等操作来访问它们。