循环匹配名称列表并根据名称的性别填充新变量
Posted
技术标签:
【中文标题】循环匹配名称列表并根据名称的性别填充新变量【英文标题】:Loop to match lists of names and populate a new variable according to the gender of the names 【发布时间】:2014-03-15 18:44:00 【问题描述】:假设我有以下列表,其中“名称”是名称的完整列表(例如,在一个类中):
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)
但是,我的问题是没有一个女性名字被正确识别,并且为新的 women 变量接收到相应的值 1。 如何正确执行此循环以匹配名称并相应地填充我的新变量?
【问题讨论】:
虽然我会推荐 Ananda 的答案,但您的逻辑实际上对我来说很好。我在第 3 行和第 5 行得到一个 1 的列矩阵。你会发生什么? @BrodieG,阅读剩下的问题,也许他们可能正在寻找table(women[, 1])
而不是summary
...
@BrodieG 我得到的结果都是 0,如果我在循环中的条件语句实际上是正确制定的,那么情况就不应该如此。奇怪的是,您从上面的示例代码中得到了正确的结果,因为循环既不适用于上面的示例,也不适用于我的实际数据。我通常同意接受阿南达的回答,但我仍然对为什么上面的一般方法不能正确执行感到困惑。
@DVHughes,您的示例代码也适用于我。
@DVHughes,你为什么不尝试清理你的工作区(虽然这不应该真的有什么不同),并重新运行你在这个问题中的代码(只需复制和粘贴从这里)。然后,只需查看women
的内容(不要使用summary
),如果仍然不起作用,请告诉我们。
【参考方案1】:
不完全是您所问问题的答案,但也许这是一个更好的答案。
qdap 的开发版本有一个可能感兴趣的性功能名称 (name2sex
):
names<-c("Paul", "Tyler", "Roberta", "Greg", "Tiffany")
name2sex(names)
## > name2sex(names)
## [1] M M F M F
## OR....
name2sex(names, USE.NAMES=TRUE)
## > name2sex(names, USE.NAMES=TRUE)
## Paul Tyler Roberta Greg Tiffany
## M M F M F
并获取数值:
## 2 - as.numeric(name2sex(names))
## > 2 -as.numeric(name2sex(names))
## [1] 0 0 1 0 1
【讨论】:
+1。我不记得我在哪里看到过这个功能。一定是当我在 Git Hub 上查看你的一些代码时...... @Tyler Rinker 此功能是否适用于其他语言的名称?特殊字符等? 如果你使用?name2sex
,你会看到描述是Predict gender from U.S. names (based on 1990 U.S. census data).
【参考方案2】:
你应该只使用%in%
:
> names[, 1] %in% female_names[, 1]
[1] FALSE FALSE TRUE FALSE TRUE
如果您喜欢 1 和 0 而不是 TRUE
和 FALSE
,则可以将整个内容包装在 as.numeric
中:
> as.numeric(names[, 1] %in% female_names[, 1])
[1] 0 0 1 0 1
【讨论】:
以上是关于循环匹配名称列表并根据名称的性别填充新变量的主要内容,如果未能解决你的问题,请参考以下文章
powershell 这将遍历目录中的文件列表,解析文件的名称,并根据解析的名称创建新文件。氏