2014-11-10 1 views
1

내 data.frame에서 일부 행을 제거하고 싶습니다. 의 예를 시작하자 :지정된 열에 ","가있는 경우 데이터 프레임에서 행 제거

> tbl_EOD[20:40,] 
    AGI.identifier    location_subacon 
20 AT1G11360.4      plastid 
21 AT1G11650.2      nucleus 
22 AT1G11930.2      cytosol 
23 AT1G12010.1     peroxisome 
24 AT1G12080.2      nucleus 
25 AT1G12140.1    plasma membrane 
26 AT1G12250.2    cytosol,nucleus ## row which I want to delete 
27 AT1G12520.2     peroxisome 
28 AT1G13320.2      cytosol 
29 AT1G13930.3      nucleus 
30 AT1G14250.1 extracellular,plasma membrane ## row which I want to delete 
31 AT1G15340.2      nucleus 
32 AT1G15470.1      cytosol 
33 AT1G16460.4      cytosol 
34 AT1G16820.2   cytosol,mitochondrion ## row which I want to delete 
35 AT1G17150.1     extracellular 
36 AT1G17330.1      cytosol 
37 AT1G17470.2      cytosol 
38 AT1G17890.3      cytosol 
39 AT1G19730.1      cytosol 
40 AT1G20060.1      nucleus 

을 난 그냥 혼수 상태에 의해 분리 된 두 개의 언어 버전이 해당 행을 제거 할 예에 표시한다.

답변

3

grepl을 사용할 수 있습니다.

tbl_EOD <- tbl_EOD[!grepl(",", tbl_EOD$location_subacon), ] 

설명 : grepl 검색 문자 벡터, 그것은 패턴, S를 호출합니다. S의 해당 요소에 패턴이 포함되어 있으면 TRUE과 동일한 길이의 벡터를 반환하고 그렇지 않으면 FALSE을 반환합니다. 이 경우 패턴은 ","입니다. 정말로 원하는 것은 쉼표가없는 행이므로 "!" TRUE 인 모든 값을 FALSE으로 바꾸고 그 반대의 경우는 grepl 앞에 있습니다. 모든 행을 유지하지만, 쉼표 후 모든 것을 제거하려면


, 당신은 gsub를 사용할 수 있습니다.

tbl_EOD$location_subacon <- gsub("(.*),.*", "\\1", tbl_EOD$location_subacon) 

설명 : gsub는 패턴 문자 벡터 S를 검색하고 교체하여 해당 패턴의 모든 발생을 대체합니다. 이 경우 패턴은 "(.*),.*"이고 대체는 "\\1"입니다. 패턴은 "(zero or more characters) followed by a comma followed by zero or more characters"과 같은 정규 표현식입니다. 여기에서 괄호는 닫힌 부분을 캡처하여 나중에 참조 할 수 있습니다. 교체는이 경우 캡처 된 부분 일 뿐이며 \\1으로 표시됩니다.

+0

꽤 잘 작동합니다. 모든 행을 유지하고 하나의 가능성 (첫 번째 가능성) 만 유지하려는 경우 어떤 생각을해야합니까? 코마와 그 이후의 모든 것을 제거하십시오. 나는 다른 질문을해야하는지 모르겠다. –

+1

새 질문에 대한 답변을 포함하도록 답변을 편집했습니다. – blakeoft

+0

놀라운 작품. 감사! –

관련 문제