2016-08-16 3 views
-1

하나의 열에 여러 값이있는 .cvs 데이터 집합이 있습니다.하나의 셀에서 여러 값을 부울 값으로 표시된 여러 기능 열로 나누는 방법 (R/Python)

| year_built |  amenity      | 
---------------------------------------------------- 
|  1990 | Courtyard,      | 
|  2015 | Elevator,Pets - Cats ok,   | 
|  1998 | Elevator,Pets - Cats ok,Post-War | 

전송 나는 scikit을 확인

| year_built |    amenity    | Elevator | Pets - Cats ok | Post-War | Courtyard | 
------------------------------------------------------------------------------------------------------ 
|  1990 | Courtyard,      |   0 |    0 |  0 |   1 | 
|  2015 | Elevator,Pets - Cats ok,   |   1 |    1 |  0 |   0 | 
|  1998 | Elevator,Pets - Cats ok,Post-War |   1 |    1 |  1 |   0 | 

에 : 나는 내가 이러한 값을 분할하고 특정 항목이 기능을 등이있는 경우 서 부울로 표시된 하나의 기능 열로을 변경할 수 있기를 바랍니다 전처리 패키지에서 클래스 'binarizer'를 배우면, 내가 원하는 것을 얻을 수 있지만 그 전에이 값들을 분리하고 인식 할 수있는 방법이 필요합니다.

R 또는 Python을 사용하여이를 처리 할 수있는 방법이 있습니까?

+1

데이터의 재현 할 수있는 예제와 찾고있는 출력을 제공하십시오. –

+0

데이터를 복사하여 붙여 넣을 수있는 데이터로 포함해야합니다 질문의 텍스트; 우리가 스크린 샷으로 작업하기가 어렵습니다. –

+0

@WeihuangWong 나는 이것에 대해 꽤 새로운데, 나는 문제를 다시 편집했다.보기가 더 쉬웠지만 당신이 말했던 복사 - 할 수있는 텍스트가 아닐 수도있다. 당신이 말했던 복사 - 투 - 패싱 가능한 텍스트의 참조를 줄 수 있습니까? –

답변

1

가짜 데이터 세트를 사용하는 한 가지 방법을 보여줍니다.

set.seed(123) 
d <- lapply(replicate(10, sample(letters[1:10], sample(1:10, 1))), function(x){ 
    paste(x, collapse = ",") 
}) 
d <- data.frame(id = 1:10, features = unlist(d), stringsAsFactors = FALSE) 
d 
# id   features 
# 1 1    h,d,j 
# 2 2 a,e,h,d,c,i,b,f,g,j 
# 3 3 c,a,j,g,f,d,h,e,b 
# 4 4  f,j,c,b,i,e,h,d 
# 5 5     e 
# 6 6  c,j,b,a,i,f,h,g 
# 7 7     c,e 
# 8 8    i,a,d 
# 9 9  b,f,j,a,e,i,h,d 
# 10 10     d 

분할까지 쉼표를 사용하여 기능 및 복구 독특한 기능의 벡터 :

d$split <- strsplit(d$features, ",") 
features <- unique(unlist(d$split)) 
features 
# [1] "h" "d" "j" "a" "e" "c" "i" "b" "f" "g" 

우리는 기능은 각 기능에 관찰의 세트에서 발견되는 경우 확인하기 위해 %in% 연산자를 사용

features_matrix <- do.call(rbind, lapply(d$split, function(x) features %in% x)) 
features_matrix <- as.data.frame(features_matrix) 
dimnames(features_matrix) <- list(d$id, features) 
features_matrix 
#  h  d  j  a  e  c  i  b  f  g 
# 1 TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
# 2 TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
# 3 TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE 
# 4 TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE 
# 5 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
# 6 TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE 
# 7 FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE 
# 8 FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE 
# 9 TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE 
# 10 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
관련 문제