我使用以下代码搜索项目列表,如果它们包含我正在寻找的单词,则对其进行分类。
yo <- c("winter", "winter storm", "downline", "Hurricane", "c", "c")
t = data.frame(yo)
b <- grep("winter", t$yo)
c <- grep("downline", t$yo)
d <- grep("Hurricane",t$yo)
t$y2[b] = "Winter"
t$y2[c] = "downline"
t$y2[d] = "Hurricane"
输出:
yo y2
winter Winter
winter storm Winter
downline downline
Hurricane Hurricane
c Winter
c Winter
任何想法为什么它将最后两个归类为冬天,即使grep函数找不到与之匹配的东西?
答案 0 :(得分:4)
键入t$y2[b] = "Winter"
时,y2列尚不存在。但由于data.frame的所有列必须具有相同的大小,因此b c(1,2)
的模式将重复三次以填充该列。
您可以输入此内容以查看发生的情况:
t = data.frame(yo)
t$y2[b] = "Winter"
t
如果输入是包含2个元素而不是&#34; Winter&#34;的向量,我们可以看到这两个元素重复:
t = data.frame(yo)
t$y2[b] = c("Winter", "Not Winter")
t
如果t的行数不是索引向量的倍数,则R引发错误:
t = data.frame(yo)
t$y2[1:5] = "Winter"
t
一个简单的解决方法是在使用之前使用默认值初始化y2:
t = data.frame(yo)
b <- grep("winter", t$yo)
c <- grep("downline", t$yo)
d <- grep("Hurricane",t$yo)
t$y2 = ""
t$y2[b] = "Winter"
t$y2[c] = "downline"
t$y2[d] = "Hurricane"
yo y2
1 winter Winter
2 winter storm Winter
3 downline downline
4 Hurricane Hurricane
5 c
6 c