2016-12-10 1 views
-1

모든 논리 열을 단일 열로 강압하여 열 제목을 요인으로 사용하는 방법을 찾고 싶습니다.여러 개의 TRUE/FALSE 열을 하나로 병합

Eviction.ID Non.Payment Breach Nuisance Illegal.Use 
1  M162268  TRUE FALSE FALSE  FALSE 
2  M161957  FALSE FALSE  TRUE  FALSE 
3  M162256  TRUE FALSE FALSE  FALSE 
4  M162135  FALSE TRUE FALSE  FALSE 
5  M161901  FALSE FALSE  TRUE  FALSE 
6  M162428  FALSE FALSE FALSE  TRUE 

원하는 출력 : 어떤 도움을 크게 감상 할 수

Eviction.ID    Reason 
1  M162268  Non.Payment 
2  M161957   Nuisance 
3  M162256  Non.Payment 
4  M162135   Breach 
5  M161901   Nuisance 
6  M162428  Illegal.Use 

여기

은 예입니다!

답변

3

max.col을 사용하면 각 행의 max 값 (여기는 TRUE)의 인덱스를 가져올 수 있으며 해당 인덱스를 기반으로 해당 열 이름을 가져오고 첫 번째 열은 cbind입니다.

cbind(df1[1], Reason= names(df1)[max.col(df1[-1], "first")+1]) 
# Eviction.ID  Reason 
#1  M162268 Non.Payment 
#2  M161957 Nuisance 
#3  M162256 Non.Payment 
#4  M162135  Breach 
#5  M161901 Nuisance 
#6  M162428 Illegal.Use 
1

당신은 다양한에서 길이에 데이터를 바꿀 수는 다음 표준 부분 집합 작업

library(reshape2) 

## melt from wide to long 
df <- melt(df, "Eviction.ID", variable.name = "Reason") 

## subset on TRUE values/rows, and keep the columns of interest 
df[df$value == TRUE, c("Eviction.ID", "Reason")] 
# Eviction.ID  Reason 
# 1  M162268 Non.Payment 
# 3  M162256 Non.Payment 
# 10  M162135  Breach 
# 14  M161957 Nuisance 
# 17  M161901 Nuisance 
# 24  M162428 Illegal.Use 
에게이된다
관련 문제