#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
.
- Во-первых, наши грязные данные:
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]
- Создайте нашу функцию очистки,
clean()
:
clean <- function(x){gsub("[^-0-9 ]", "",x)}
- Примените нашу функцию очистки:
df$z <- lapply(df$z, clean)
- Наконец, приведите
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, я отредактировал свой ответ, чтобы отразить ваш новый вариант использования. Надеюсь, это хорошая ссылка, но если вам нужно предоставить еще больше информации, я предлагаю опубликовать ее в качестве нового вопроса с воспроизводимыми данными, чтобы я мог оказать вам более целенаправленную помощь