当我遍历行并有条件地更改一列时,循环执行得非常慢。如何让操作更快?

时间:2014-11-11 02:22:42

标签: r

这里我要检查每行是否第一列元素是否等于“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 ..

2 个答案:

答案 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