使用循环和grepl从大数据集中删除多行

时间:2016-06-08 12:18:58

标签: r

我有一个名为data1的数据集,由列中的214个国家和地区组成。我想删除不属于非洲的国家/地区的所有行。

我知道我可以应用以下代码删除特定行:

data1clean <- data1[!grepl("Albania",data1$Country.Name),]
data2clean <- data1clean[!grepl("Andorra",data1$Country.Name),] 
data3clean <- data2clean[!grepl("France",data1$Country.Name),]
...

事实是我不想写这个命令超过100次。我在考虑循环可能但是我的工作不正常:

x <- data1clean
i <- Country.Names$data1
if(i=c("Albania","Andorra","France"){
  print(x <- data1[!grepl(i,data1$Country.Name),] )
}

2 个答案:

答案 0 :(得分:3)

可能最好的方法是建立非洲国家名单和使用%in%

# vector of african countries
africanCountries <- c("Algeria", "Angola", ..., "Zambia", "Zimbabwe")

# subset using %in%
myData <- data1[data1$country %in% africanCountries, ]

如果您担心大写/小写,可以使用touppertolower函数让矢量达成一致。

答案 1 :(得分:2)

我们可以使用data.table

高效地完成这项工作
library(data.table)
africanCountries <- c("Algeria", "Angola", ..., "Zambia", "Zimbabwe")
dt1 <- setDT(data1, key = "country")[(africanCountries)]