r - 循环匹配姓名列表并根据姓名的性别填充新变量

标签 r for-loop conditional-statements

假设我有以下列表,其中“名称”是名称的完整列表(例如,在一个类(class)中):

names<-as.matrix(c("Paul", "Tyler", "Roberta", "Greg", "Tiffany"))

假设我有第二个名字列表,这个列表只包括“女性”名字:

female_names<-as.matrix(c("Roberta", "Tiffany", "Michelle", "Ashley"))

我正在尝试创建另一个变量“women”,如果“names”中的元素与上面第二个列表中的“女性名字”之一匹配,则该变量取值 1。

women<-as.matrix(rep(0, 5))

for(i in 1:nrow(names)){
  for(j in 1:nrow(female_names)){
    if(names[i,1]==female_names[j,1]){women[i]<-1}
  }
}

但是,我在总结新变量women的时候,所有的值都是0,不应该是这样的。

summary(women)

但是,我的问题是没有一个女性名字被正确识别并且接收到新女性变量的相应值 1。 我如何才能正确执行此循环以匹配名称并相应地填充我的新变量?

最佳答案

你应该只使用%in%:

> names[, 1] %in% female_names[, 1]
[1] FALSE FALSE  TRUE FALSE  TRUE

如果您更喜欢 1 和 0 而不是 TRUEFALSE,则可以将整个内容包装在 as.numeric 中:

> as.numeric(names[, 1] %in% female_names[, 1])
[1] 0 0 1 0 1

关于r - 循环匹配姓名列表并根据姓名的性别填充新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21812673/

相关文章:

r - 从 gamlss 对象中提取随机效应

r - 基于多列上的 NA 过滤数据框

c++ - 您可以在 if 语句中使用 2 个或更多 OR 条件吗?

sql - SQL语句中使用WHERE 1=1的目的是什么?

java - JSP 如果是则递增

r - 在数据框列上使用 Poly

r - 考虑另一个数据框中保存的行和列索引,从新变量中的数据框中获取值

r - K-Skip-N-Gram : generalization of for-loops in R

c - 逗号分隔的表达式作为 for 循环中的条件如何工作?

javascript - 通过for循环发送信息