2017-09-21 2 views
0

제 질문은 보통 subset으로 해결할 수있는 비교적 간단한 문제입니다. 이 경우 결과적으로 데이터 프레임이 아닌 벡터가 필요하며 누군가가 도움을 줄 수 있기를 바랍니다.R에서 벡터 결과를 얻으려면 부분 집합 대신 무엇을 사용해야합니까?

두 종, 종 및 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 

것입니다 그러나 이것은 나에게 데이터 프레임과 같은 결과를 제공하고 I는 벡터로 결과를 싶습니다

내가 할 것 일부를 사용.

나는 답을 찾았지만 하나도 찾을 수 없었고, 나는 R에 대해 상당히 새로운 지식을 가지고있다. 아마도 지식 격차가 있다면 아마 설명 될 수있을 것이다.

+1

'올라가지 (서브 세트 (...))'또는'DF1을 $의 ID 또는 (df1, ID [Species == "Species1"]'또는 ... – Cath

+0

감사합니다 @ 캐스가 첫 번째 이상한 결과 - ID_1, ID_2 등 벡터의 각 값을 명명하지만 두 번째 완벽하게 작동합니다. –

+0

'as.vector()'함수를 삽입한다면? 'df2 <- as.vector (subset (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