如何检查行中的两个字段是否相同,并根据R中的字段创建另一个变量

时间:2014-01-20 17:56:53

标签: r

我的数据集包含字段user_country和advertiser_country。 我想创建另一个变量,如果user_country匹配advertiser_country,则表示“local”,如果不是,则表示“not_local”。

最好的方法是什么?

我尝试了类似的东西,但它不起作用:

with(dataset2, dataset2$local_country <- if (identical(user_country,advertiser_country)) "local" else "not_local")

3 个答案:

答案 0 :(得分:1)

您可以使用ifelse范例:

dataset2$local_country = ifelse(dataset2$user_country==dataset2$advertiser_country, "local","not_local")

这将评估由==调用产生的数组中的每个元素,如果为true,则返回“local”,否则返回“not_local”。 identical只测试完整的对象,所以除非一切都是本地的,否则它将返回一个“FALSE”。

以下是生成框架的代码:

dataset2 = data.frame("user_country"=sample(letters,100,replace=T),"advertiser_country"=sample(letters[1:10],100,replace=T),stringsAsFactors=F)
dataset2$local_country = with(dataset2,ifelse(user_country==advertiser_country, "local","not_local"))

答案 1 :(得分:0)

您可以使用可能的值创建向量,并使用比较返回的值(+ 1)作为索引。

dataset2 <- transform(dataset2, 
                      local_country = c("not_local", 
                                        "local")[(user_country == 
                                                    advertiser_country) + 1])

答案 2 :(得分:0)

我使用的解决方案是由同事给我的:

我稍微改变了变量,我决定按照他的建议用TRUE和FALSE值创建is_local

dataset2$user_country <- as.character(dataset2$user_country)
dataset2$advertiser_country <- as.character(dataset2$advertiser_country)

dataset2$is_local <- FALSE
dataset2[dataset2$advertiser_country == dataset2$user_country,]$local <- TRUE