2016-12-10 6 views
-1

すべての論理列を要因として列タイトルを1つの列に強制する方法を知りたい。複数のTRUE/FALSE列を1つに結合する

ここ

は一例です。

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 
となり、長期に広いからデータを再構築することができます
関連する問題