【发布时间】: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),如果仍然不起作用,请告诉我们。
标签: r for-loop conditional-statements