这里我要检查每行是否第一列元素是否等于“060075”。如果没有,我想将元素更改为“其他”。当我在前100行运行代码时,需要10秒。我需要在650万行上运行它。 如何让它更快?
for (i in 1:nrow(full_data_2)){
if (full_data_2[i, 1] != "06075") {
full_data_2[i, 1] <- "Other"
}
}
这是str(full_data_2)
data.frame': 6497651 obs. of 6 variables:
$ fips : chr "Other" "Other" "Other" "Other" ...
$ SCC : chr "10100401" "10100404" "10100501" "10200401" ...
$ Pollutant: chr "PM25-PRI" "PM25-PRI" "PM25-PRI" "PM25-PRI" ...
$ Emissions: num 15.714 234.178 0.128 2.036 0.388 ...
$ type : chr "POINT" "POINT" "POINT" "POINT" ...
$ year : int 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 ..
答案 0 :(得分:2)
您需要利用矢量操作来加快速度。对元素进行操作有时需要复制数据框。更改代码的最简单方法是
full_data_2[,1] <- ifelse(full_data_2[,1]=="06075", "Other", full_data_2[,1])
data.table是另一种在列表上运行的替代方案,通常比数据帧更快。
答案 1 :(得分:2)
看看是否有效
# assume df is your data frame
library(data.table)
setDT(df) # convert df to data table
setkey(df, col_1) # key the column of interest. Assume it's col_1
df["06075", col_1 := "Other"] # Assign "Other" to col_1 if element is "06075"
df