2017-09-21 8 views
0

私の質問は、私が通常subsetで解決する比較的簡単な問題です。この場合、結果としてデータフレームではなくベクトルが必要となり、誰かが助けてくれることを望んでいます。Rでベクトル結果を得るためにサブセットの代わりに使用するものは?

私は2つの列、種とIDを持つデータフレームを持っています。

Species  ID 
Species1 A01 
Species1 A02 
Species1 B01 
Species1 B02 
Species2 A03 
Species2 A04 
Species2 B03 
Species2 B04 
Species3 A05 
Species3 A06 
Species3 B05 
Species3 B06 
Species3 B07 

各種について、その種の関連IDのベクターを作成したいと考えています。

df2 <- subset(df1, Species == Species1, select = "ID") 

をし、その結果を

ID 
A01 
A02 
B01 
B02 

だろう。しかし、これは私のデータフレームとして結果を与えると私はベクトルとして結果が欲しい:

私はどうなるのサブセットを使用します。

私は答えを探して見つけられませんでしたが、私はRにかなり新しいです - おそらく知識のギャップがある場合、これは説明することができます。

+1

'非公開に(サブセット(...)) 'または' DF1の$ IDを、または( df1、ID [Species == "Species1"] 'または... – Cath

+0

ありがとう@キャスティングは最初に奇妙な結果 - ID_1、ID_2などでベクトルの各値を命名しますが、2番目の値は完全に機能します。 –

+0

'as.vector()'関数を挿入すれば? 'df2 < - as.vector(サブセット(df1、Species == Species1、select =" ID "))' – R18

答えて

0

subsetに引数drop = TRUEを使用してベクトルを返すことができます。私はそれを理解してここ

subset(df1, Species == "Species1", select = ID, drop = TRUE) 
# [1] A01 A02 B01 B02 
+0

パーフェクト。これは私が探していたシンプルなソリューションです。ありがとうございました。 –

0

はあなたのdata.frameの最小限の例です:あなたが言ったように私は思い何

cat <- c("A01", "A02", "B01", "B02", "A03") 
species <- c("species1", "species1", "species1", "species2", "species2") 
x_name <- "species" 
y_name <- "ID" 
df <- data.frame(species, cat) 
names(df) <- c(x_name, y_name) 
df 
species ID 
1 species1 A01 
2 species1 A02 
3 species1 B01 
4 species2 B02 
5 species2 A03 

はサブセットであり、その後、新しい変数を割り当て、データ型を指定し、そしてキャスとして非公開には、カラム指定するブラケットを使用して、上記で示唆:で `[$種== "Species1" DF1]

df2 <- subset(df, species == "species1") 
df2 
species ID 
1 species1 A01 
2 species1 A02 
3 species1 B01 

a <- as.character(unlist(df2[,2], use.names = F)) 
a 
[1] "A01" "A02" "B01" 
is.vector(a) 
[1] TRUE 

df3 <- subset(df, species == "species2") 
df3 
species ID 
4 species2 B02 
5 species2 A03 

b <- as.character(unlist(df3[,2], use.names = F)) 
b 
[1] "B02" "A03" 
is.vector(b) 
[1] TRUE 
関連する問題