我正在尝试在我的数据框中添加一个名为Solvent的列,并根据溶剂利用率返回yes或no,我已经成功添加了另一个获取县数据的列但我的溶剂代码不工作。我收到错误:“SCC $ SCC.Level.One中的错误:$运算符对原子向量无效”
NEI <- readRDS("summarySCC_PM25.rds")
SCC <- readRDS("Source_Classification_Code.rds")
library(ggplot2)
form <- NEI[,c("fips","SCC", "Emissions")]
LANEI <- form[form$fips=="06037",]
OCNEI <- form[form$fips == "06059",]
SBCNEI <- form[form$fips =="06071",]
AllNEI<-rbind(rbind(LANEI,OCNEI), SBCNEI)
GetCounty <-function (fips)
{
if (fips == "06037")
return ("Los Angeles")
else if (fips == "06059")
return ("Orange County")
if (fips == "06071")
return ("San Bernardino County")
}
chckSolv <- function (SCC)
{
if ( SCC$SCC.Level.One == "Solvent Utilization")
return ("Yes")
else
return ("No")
}
CountyData <- sapply(AllNEI$fips, GetCounty)
solventData <- sapply(AllNEI$SCC,chckSolv)
AllNEI <-cbind (AllNEI, Solvent = solventData)
AllNEI <- cbind(AllNEI, county = CountyData)
答案 0 :(得分:1)
问题似乎是您使用SCC
作为函数chckSolv
的参数名称,但之后使用它来尝试引用全局定义的SCC
数据框你的脚本。您的函数不会使用全局定义的版本(因为名称SCC
是在您的函数中本地定义的)
如果将参数更改为其他名称,则应该有效。尝试这样的事情:
chckSolv <- function (vec)
{
if ( vec == "Solvent Utilization")
return ("Yes")
else
return ("No")
}
答案 1 :(得分:1)
考虑使用矢量化ifelse()
。您之前的错误是由于引用了特定值SCC.Level.On
上的命名元素SCC
。
AllNEI$CountyData <- ifelse(AllNEI$fips == "06037", "Los Angeles",
ifelse(AllNEI$fips == "06059", "Orange County",
ifelse(AllNEIfips == "06071", "San Bernardino County", NA)
AllNEI$SolventData <- ifelse(AllNEI$SCC == "Solvent Utilization", "Yes", "No")
此外,您可以减少rbind操作:
AllNEI <- NEI[NEI$fips %in% c("06037", "06059", "06071"), c("fips", "SCC", "Emissions")]