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」などを入れたい

どうやってやるの?

後でフィルタリングしたいので、2つのベクトルを結合したい

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

または、cbind なしでそれを行う別の機会はありますか?

4

2 に答える 2

12

vectorsと組み合わせるとcbind、結果は になり、1matrix種類のデータしか保持できません。したがって、「種」係数は、その基礎となる数値に強制されます。

列に異なるデータ型を持たせる必要がある場合は、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、それが最も一般的なクラスであるため、すべてが に変換されます (数字を文字として表現することはできますが、その逆はできません)。data.frameR は、さまざまなクラスの列を格納するために依存しています。

必要なことを行うには、明示的に新しいものを作成するか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 に答える