5
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”等而不是数字

我怎样才能做到这一点?

我想组合这两个向量,因为我想在之后过滤

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

还是没有cbind还有另一个机会来做到这一点?

4

2 回答 2

12

vectors结合cbind,结果将是 a 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
于 2014-05-09T14:55:28.160 回答
1

cbind()返回matrix必须属于单个类的 a。在这种情况下,所有内容都被转换为,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

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

于 2014-05-09T14:56:05.257 回答