Удалите первую запятую и пробел между двумя текстами и последней запятой или пробелом - PullRequest
0 голосов
/ 28 мая 2020

Я объединил несколько столбцов из фрейма данных в один столбец. Теперь из-за форматирования у меня возникают некоторые проблемы. Я хочу удалить запятую, если она стоит на первом месте, и запятую на последнем месте, а также удалить пробел между текстами. eq: если объединенная строка:

, это test, dd, pqr, тогда это должно быть преобразовано в this, dd, prq

df <- as.data.frame(rbind(c('11061002','11862192','11083069'),
                          c(" ",'1234567','452589'),
                          c("fs","  ","dd","  ")))

df$f1 <-paste0(df$V1,
               ',',
               "  ",
               df$V2,
               ',',
               "  ",
               df$V3,',',df$V4)   

df_1 <- as.data.frame(df[,c(5)])
names(df_1)[1] <-"f1"

ожидаемый результат:

11061002,11862192,11083069,11061002 (No spaces)  
1234567,452589  
fs,dd  

С уважением, Р

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Использование двойного gsub:

gsub(',{2,}', ',', gsub('^,|,$| ', '', trimws(df_1$f1)))
#[1] "11061002,11862192,11083069,11061002" "1234567,452589"  "fs,dd"   

,{2,} - заменяет более 2+ последовательных запятых одной запятой.

^, - убирает запятые в начале.

,$ - убирает запятые в конце.

и удалите пробелы из строки.

2 голосов
/ 28 мая 2020

Кажется, у вас двойной пробел в третьем ряду. Один из способов приблизиться к этому - использовать apply с полем 1 для выполнения построчной операции; в вашем случае paste, т.е.

apply(df, 1, function(i)paste(i[!i %in% c(' ', '  ')], collapse = ','))
#[1] "11061002,11862192,11083069" "1234567,452589"             "fs,dd"   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...