cbind用数字替换String?

时间:2014-05-09 14:49:37

标签: r vector matrix cbind

x = iris$Sepal.Width;
y = iris$Species;

m = cbind(x,y);

m的输出是:

        x  y
  [1,] 3.5 1
  [2,] 3.0 1
  [3,] 3.2 1
  [4,] 3.1 1
  [5,] 3.6 1
  [6,] 3.9 1

但我希望在y列中使用setosa'等,而不是数字

我该怎么做?

我想组合2个向量,因为我想用

过滤
m[m[,"y"]=="virginica",]

或者在没有cbind的情况下是另一个机会呢?

2 个答案:

答案 0 :(得分:10)

对于与vectors合并的cbind,结果将是matrix,它只能容纳一种类型的数据。因此,“物种”因子被强制转化为其基础数值。

如果您的列需要不同的数据类型,请尝试使用cbind.data.frame(或仅data.frame)。

> head(data.frame(x, y))
    x      y
1 3.5 setosa
2 3.0 setosa
3 3.2 setosa
4 3.1 setosa
5 3.6 setosa
6 3.9 setosa
> head(cbind.data.frame(x, y))
    x      y
1 3.5 setosa
2 3.0 setosa
3 3.2 setosa
4 3.1 setosa
5 3.6 setosa
6 3.9 setosa

答案 1 :(得分:1)

cbind()返回matrix,必须是单个类。在这种情况下,所有内容都会转换为character,因为这是最常见的类(您可以将数字表示为字符,但不是相反)。 R依靠data.frame来存储不同类的列。

要做你想做的事,你可以明确地创建一个新的data.frame或使用当前的一个子集:

iris2 <- data.frame(x=iris$Sepal.Width, y=iris$Species)  ## creates new data.frame
iris[, c("Sepal.Width", "Species")   ## returns subset of iris

如果你发布了试图解决的问题,可能会有一种更简化的方法来进行你想要的过滤。