Разделение отрицательных чисел в строке

#r

Вопрос:

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

 2.152558660121547 -2.5288097630405373 -2.182210847353577 -2.260599309173921 -2.3735065848552206 -2.345873321122266  2.5951723062515732 -2.5666440436296636 -2.1922111573930803 -2.602270010387569 -2.3255753772614023 -11.435752398292653 -2.1471980792213876 -2.0147604731588857 -11.8567454621472 -2.4131938571914175
 

похоже на

 row 1 [-1 3 -4 -5 -6 ]
row 2 [-8 -3 -4  9 -6 ]
 

Я хотел бы разделить это на одну строку, я попробовал следующее

   separate_rows(df, y, z, convert = TRUE)
 

Что, казалось, сработало, единственная проблема в том, что отрицательные числа теперь положительные. Я хотел бы просто снять квадратные скобки без того, чтобы цифры стали положительными.

Комментарии:

1. Пожалуйста, отредактируйте свой пост, чтобы включить dput(A) в него .

Ответ №1:

Используя регулярное выражение для замены всего, что не является пробелом ( ), числовым, включая отрицательный знак ( ^-0-9 ), вы можете написать следующую gsub() команду:

 gsub("[^-0-9 ]", "",A)

# returns:
# "-1 3 -4 -5 -6"
 

Это позволит удалить квадратные скобки, а также все остальное, что не является пробелом, отрицательным знаком и цифрой (0-9).

Потому что вы не предусмотрели A , для полноты и воспроизводимости я предположил A , что:

 A <- "[-1 3 -4 -5 -6]"
 

Правка 1

Основываясь на дополнительных комментариях OP, вот как вы могли бы использовать его в сочетании с separate_rows функцией from tidyr .

  1. Во-первых, наши грязные данные:
 df <- data.frame(z=c("[-1 -3]", "[3 -2 -4]", "[1 5]"))
print(df)

# returns:
#           z
# 1   [-1 -3]
# 2 [3 -2 -4]
# 3     [1 5]
 
  1. Создайте нашу функцию очистки, clean() :
 clean <- function(x){gsub("[^-0-9 ]", "",x)}
 
  1. Примените нашу функцию очистки:
 df$z <- lapply(df$z, clean)
 
  1. Наконец, приведите separate_rows :
 tidyr::separate_rows(df, z, sep=" ", convert=TRUE)
 

Результатом этого будет:

 # A tibble: 7 x 1
      z
  <int>
1    -1
2    -3
3     3
4    -2
5    -4
6     1
7     5
 

Комментарии:

1. Извините, я задал неправильный вопрос, как насчет использования функции отдельных строк

2. @FalconX, не могли бы вы опубликовать новый вопрос с образцом данных? Я рад помочь вам в этом. Позвоните dput() в свой фрейм данных, чтобы выгрузить ваши данные, чтобы мы могли лучше помочь!

3. @FalconX, я отредактировал свой ответ, чтобы отразить ваш новый вариант использования. Надеюсь, это хорошая ссылка, но если вам нужно предоставить еще больше информации, я предлагаю опубликовать ее в качестве нового вопроса с воспроизводимыми данными, чтобы я мог оказать вам более целенаправленную помощь