2014-10-15 2 views
1

안녕하세요 저는 0-10000의 데이터 값을 가진 Excel 문서 (100 열, 350 행)를 가지고 있습니다. 나는 어떤 열이 값> 0을 포함하고있는 목록을 얻으려고 노력했다. 나는 신청으로 땜질하고 있었지만 일할 수있는 것을 얻을 수 없으며, 어떤 도움도 크게 감사 할 것입니다.데이터가 0 일 때 행 단위로 열 이름을 나열하는 방법

e.g  Col1 Col2 Col3 Col4 
    row 1 1  2  0  0  
    row 2 0  1 1  0 
    row 3 2  0 0  0 

    row 1 col1 col2 
    row 2 col2 col3 
    row 3 col1' 
+0

쉬운이'colSums (데이터)' –

+0

@Adii_입니다 볼 수 있었다 1 –

+0

@RichardScriven 질문을 이해하면서, 목표는 0 (colSum> 0)뿐만 아니라 0을 포함하는 열을 찾는 것입니다. 또 다른 충고는 0을 NA'a로하여 파일을 읽습니다. –

답변

1

데이터를 논리 매트릭스로 먼저 변환 한 후 names을 사용할 수 있습니다. df 원래 데이터

apply(df > 0, 1, function(x) names(which(x))) 
# $`row 1` 
# [1] "Col1" "Col2" 
# 
# $`row 2` 
# [1] "Col2" "Col3" 
# 
# $`row 3` 
# [1] "Col1" 
+0

리차드에게 감사드립니다. 제가 누락 된 것이 있었고, 매트릭스로 변환되지 않았 음을 알고있었습니다. 너는 나에게 많은 시간을 주었다. 고마워! – Marinebiologist13

1

이 작업을 수행하는 또 다른 방법의 경우, 이름과 fiter 특정 조건을 충족 이름 만 얻을 수있는 효율적인 행렬 인덱스 하위 설정을 사용하는 매트릭스를 만드는 것입니다.

id <- which(dat>0,arr.ind = TRUE) 
    row col 
row1 1 1 
row3 3 1 
row1 1 2 
row2 2 2 
row2 2 3 

당신은 nn[id] 같은 아이디, 뭔가를 사용하여 윈의 서브 세트를 할 수 있지만 당신은 행 그룹화 결과에 원하기 때문에 나는 여기 by을 사용하고 있습니다 : 이제

nn = matrix(rep(names(dat),nrow(dat)),nrow(dat),byrow=TRUE) 
nn 
    [,1] [,2] [,3] [,4] 
[1,] "Col1" "Col2" "Col3" "Col4" 
[2,] "Col1" "Col2" "Col3" "Col4" 
[3,] "Col1" "Col2" "Col3" "Col4" 

당신은 양의 값의 인덱스 which을 사용하여 얻을 : , 열 2 행의 제로가 있다고하지만 당신을 말하지 않는다 -

by(id,id[,'row'],FUN=function(i)nn[as.matrix(i)]) 

NDICES: 1 
[1] "Col1" "Col2" 
------------------------------------------------------------------------------------------------------ 
INDICES: 2 
[1] "Col2" "Col3" 
------------------------------------------------------------------------------------------------------ 
INDICES: 3 
[1] "Col1" 
관련 문제