2015-03-05 2 views
0

У меня есть кадр данных как следующийУдаление конкретных символов в кадре данных в R

>sample_df 
dd_mav2_6541_0_10 
dd_mav2_12567_0_2 
dd_mav2_43_1_341 
dd_mav2_19865_2_13 
dd_mav2_1_0_1 

Мне нужно, чтобы удалить все номера после foruth «_». Я хотел бы иметь выход как следующий

>sample_df 
    dd_mav2_6541_0 
    dd_mav2_12567_0 
    dd_mav2_43_1 
    dd_mav2_19865_2 
    dd_mav2_1_0 

Я попытался следующий код, но он удаляет только определенное количество символов, но не так, как вывод, как я уже говорил выше.

substr(sample_df,nchar(sample_df)-2,nchar(sample_df)) 

Как я могу получить свой результат.

ответ

2

вы можете попробовать это:

gsub("_\\d+$","",sample_df) 

Это удалит подчеркивание и любое число (по крайней мере один) цифр, которые следуют за ним, в конце строки.

С вашими данными:

sample_df <- c("dd_mav2_6541_0_10","dd_mav2_12567_0_2","dd_mav2_43_1_341","dd_mav2_19865_2_13","dd_mav2_1_0_1") 

gsub("_\\d+$","",sample_df) 
#[1] "dd_mav2_6541_0" "dd_mav2_12567_0" "dd_mav2_43_1" "dd_mav2_19865_2" "dd_mav2_1_0" 
0
# Create the vector (I added one more element 
# at the end, with less than 4 pieces) 
sample_df <- c("dd_mav2_6541_0_10", 
       "dd_mav2_12567_0_2", 
       "dd_mav2_43_1_341", 
       "dd_mav2_19865_2_13", 
       "dd_mav2_1_0_1", 
       "dd_mav2") 

# Split by "_" 
xx <- strsplit(x = sample_df, split = "_") 
xx 

[[1]] 
[1] "dd_mav2_6541_0" 

[[2]] 
[1] "dd_mav2_12567_0" 

[[3]] 
[1] "dd_mav2_43_1" 

[[4]] 
[1] "dd_mav2_19865_2" 

# Loop through each element and reconnect the pieces 
yy <- lapply(xx, function(a) { 
    if(length(a) < 4) { 
    return(paste(a, collapse = "_")) 
    } else { 
    return(paste(a[1:4], collapse = "_")) 
    } 
}) 
yy 

[[1]] 
[1] "dd_mav2_6541_0" 

[[2]] 
[1] "dd_mav2_12567_0" 

[[3]] 
[1] "dd_mav2_43_1" 

[[4]] 
[1] "dd_mav2_19865_2" 

# Re-create teh vector 
do.call("c", yy) 

[1] "dd_mav2_6541_0" "dd_mav2_12567_0" "dd_mav2_43_1" 
    "dd_mav2_19865_2" "dd_mav2_1_0"  "dd_mav2" 
Смежные вопросы