2016-08-04 4 views
0

다음과 같이 데이터 프레임이 있습니다.R 데이터 프레임의 열에서 부분 값 바꾸기

 chr start2  end2 value 
88 chrom16 56063633 56063634 0.238 
78 chrom12 83039622 83039623 0.429 
50 chrom12 73209081 73209082 0.313 
68 chrom12 75138610 75138611 0.679 
45 chrom12 67566601 67566602 0.859 
120 chrom16 57694245 57694246 0.438 

열의 부분 값을 변경하고 싶습니다. 이 dataframe, 나는 2

출력 패턴 방금 대체 할 수있는 당신의 예에서와 같이 간단이 경우

 chr start2  end2 value 
88 chr16 56063633 56063634 0.238 
78 chr12 83039622 83039623 0.429 
50 chr12 73209081 73209082 0.313 
68 chr12 75138610 75138611 0.679 
45 chr12 67566601 67566602 0.859 
120 chr16 57694245 57694246 0.438 
+0

사용'부 (".. ({3}) {2} (\\ + D)", "\\ 1 \\ 2"DF1을 $ chr)' – akrun

답변

1

과 같아야 열에서 "CHR"을 "CHROM"를 변경하려면 빈 문자열을 가진 "chrom"의 "om".

df <- read.table(text = " chr start2  end2 value 
           88 chrom16 56063633 56063634 0.238 
           78 chrom12 83039622 83039623 0.429 
           50 chrom12 73209081 73209082 0.313 
           68 chrom12 75138610 75138611 0.679 
           45 chrom12 67566601 67566602 0.859 
           120 chrom16 57694245 57694246 0.438", header = TRUE) 

df$chr <- sub("om", "", df$chr) 

df 
#   chr start2  end2 value 
# 88 chr16 56063633 56063634 0.238 
# 78 chr12 83039622 83039623 0.429 
# 50 chr12 73209081 73209082 0.313 
# 68 chr12 75138610 75138611 0.679 
# 45 chr12 67566601 67566602 0.859 
# 120 chr16 57694245 57694246 0.438 
+0

그러나 편집 된 열은 값 뒤에 새로운 열로 배치됩니다. – panbar

+0

@panbar 방금 내 코드를 복사 했습니까? 왜냐하면 이전 열의 값을 바꿀 뿐이 기 때문에 그 일이 일어나지 않아야하기 때문입니다. 새 열이 만들어지지 않습니다. – Alex

+0

감사합니다. 그것은 효과가 있었다. – panbar

1

우리는이 개 문자를 일치 다음 그룹으로 처음 3 개 문자를 캡처 할 수 sub를 사용하여 다음 숫자를 캡처의 역 참조 (캡처 그룹 \\1\\2)로 교체합니다. 문자열 요소가 변경되면

df1$chr <- sub("(.{3}).{2}(\\d+)", "\\1\\2", df1$chr) 
df1$chr 
#[1] "chr16" "chr12" "chr12" "chr12" "chr12" "chr16" 

또는 우리는 또한 사용할 수 있습니다 lookarounds

sub(".{2}(?=\\d)", "", df1$chr, perl = TRUE) 
#[1] "chr16" "chr12" "chr12" "chr12" "chr12" "chr16" 

이것은 또한 작동합니다.

또는 더 빠른 다른 옵션은 문자의 위치에 따라 substr입니다.

df1$chr <- with(df1, paste0(substr(chr, 1, 3), substr(chr, 6,7))) 
df1$chr 
#[1] "chr16" "chr12" "chr12" "chr12" "chr12" "chr16" 
0

두 가지 방법 :

data <- read.table(text = 'chr  start2 end2  value 
          chrom16 56063633 56063634 0.238 
          chrom12 83039622 83039623 0.429 
          chrom12 73209081 73209082 0.313 
          chrom12 75138610 75138611 0.679 
          chrom12 67566601 67566602 0.859 
          chrom16 57694245 57694246 0.438', 
        stringsAsFactors = FALSE, 
        header = TRUE) 

# stringr package + base R for assignment 
library(stringr) 
data['chr'] <- str_replace(data[['chr']], "chrom", "chr") 

data 
# chr start2  end2 value 
# 1 chr16 56063633 56063634 0.238 
# 2 chr12 83039622 83039623 0.429 
# 3 chr12 73209081 73209082 0.313 
# 4 chr12 75138610 75138611 0.679 
# 5 chr12 67566601 67566602 0.859 
# 6 chr16 57694245 57694246 0.438 

# with stringr and dplyr packages 
library(dplyr) 
data <- 
    data %>% 
    mutate(chr = str_replace(chr, "chrom", "chr")) 

data 
# chr start2  end2 value 
# 1 chr16 56063633 56063634 0.238 
# 2 chr12 83039622 83039623 0.429 
# 3 chr12 73209081 73209082 0.313 
# 4 chr12 75138610 75138611 0.679 
# 5 chr12 67566601 67566602 0.859 
# 6 chr16 57694245 57694246 0.438 
관련 문제