2013-12-17 2 views
2

R에서 정규 표현식을 동시에 사용하면서 하위 집합을 집계하거나 사용할 수 있습니까?R 정규식 및 집계/하위 집합

내가 해결하기 위해 노력하고 있어요 문제는 이것이다 :

rowColFoVCell wpbCount meanFeret meanPerim meanCirc meanAR meanRound meanSolidity 
1 001001001001  38 1.182632 3.047368 0.7560526 1.948947 0.6036842 0.8289474 
2 001001001002  8 1.886250 4.493750 0.7537500 2.365000 0.5350000 0.8325000 

이 열 번호 '001001001001', '이 포함되어 나는 데이터 프레임은 고유 식별자'rowColFoVCell '등의 여러 열'wpbCellFeatures '를 불렀다 001001001002 ','001001001003 ', ...,'001003004002 '등 ...이 ID를 구성하는 숫자는 행 번호, 열 번호, 시야 및 셀 번호에 해당하므로 예를 들어'001003004002 '는 제 1 행, 제 3 열, 제 4 시야 및 제 2 셀을 포함한다.

예를 들어, 1과 3 사이의 모든 식별자를 선택하고 새 데이터 프레임으로 집계하고 싶습니다. R에서 어떻게 할 수 있습니까? 집계 및 정규 표현식 사용이 포함될 것이라고 생각하지만이 사실에 익숙하지 않습니까? 대신 정규식 소란의

감사

답변

8

, 방금 read.fwf (또는 substr 또는 관련 함수)를 이용하여 각각의 컬럼으로 첫 번째 열을 분할한다. 그런 다음 원래 데이터 세트에 다시 바인딩하고 평소처럼 aggregate 등을 사용합니다.

toBind <- read.fwf(file = textConnection(as.character(mydf$rowColFoVCell)), 
        widths = c(3, 3, 3, 3), colClasses = "character", 
        col.names = c("Row", "Col", "FoV", "Cell")) 
cbind(toBind, mydf) 
# Row Col FoV Cell rowColFoVCell wpbCount meanFeret meanPerim meanCirc meanAR meanRound 
# 1 001 001 001 001 001001001001  38 1.182632 3.047368 0.7560526 1.948947 0.6036842 
# 2 001 001 001 002 001001001002  8 1.886250 4.493750 0.7537500 2.365000 0.5350000 
# meanSolidity 
# 1 0.8289474 
# 2 0.8325000 
다음

, 내가 같은 "mydf"로 시작 해요 : 몇 가지 조사 후

mydf <- structure(list(rowColFoVCell = c("001001001001", "001001001002"), 
        wpbCount = c(38L, 8L), meanFeret = c(1.182632, 1.88625), 
        meanPerim = c(3.047368, 4.49375), 
        meanCirc = c(0.7560526, 0.75375), 
        meanAR = c(1.948947, 2.365), 
        meanRound = c(0.6036842, 0.535), 
        meanSolidity = c(0.8289474, 0.8325)), 
        .Names = c("rowColFoVCell", "wpbCount", "meanFeret", 
          "meanPerim", "meanCirc", "meanAR", "meanRound", 
          "meanSolidity"), 
        class = "data.frame", row.names = c(NA, -2L)) 
0

, 나는 부분 집합 정규 표현식을 사용하여 집계보다는가는 방법 이었다는 것을 발견했다 .
[0-9]{3} 자리 영 구 3 배

wpbCellFeaturesControl <- subset(wpbCellFeatures, grepl("^[0-9]{3}(00[1-3])[0-9]{6}", wpbCellFeatures$rowColFoVCell)) 

grepl가 rowColFoVCell 열에서 따옴표 패턴과 일치,
^은 문자열의 시작 부분에서 시작하여 검색 할 나타냅니다 : 여기가 이러한 어려움을 해결하는 방법입니다
(00[1-3]) 패턴 001, 002 검색하고 003
[0-9]{6} 자리 아홉 여섯 번

,174 제로
+2

당신의 칼럼이 참으로 너비가 고정되어 있다면 여전히 과도하다고 생각합니다. 장기적으로 정보를 별도의 열로 유지하는 것이 좋습니다. 필요한 경우 나중에 별도의 열을 붙여 넣을 수 있습니다. – A5C1D2H2I1M1N2O1R2T1

+0

도움을 주셔서 감사 드리며 귀하의 솔루션이 효과가 있다는 데 동의하지만 가능한 한 간결하게 코드를 유지하려고합니다.이 경우 정규 표현식을 선호합니다. –