在R中分类

时间:2016-07-27 04:05:23

标签: r

我使用以下代码搜索项目列表,如果它们包含我正在寻找的单词,则对其进行分类。

 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函数找不到与之匹配的东西?

1 个答案:

答案 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