разделите строки столбца, затем создайте столбец со вторым элементом R - PullRequest
0 голосов
/ 05 мая 2020

Это сложно для меня, пожалуйста, помогите мне с этим. У меня есть df, который выглядит так:

    col1      col2    col3
ccd_x29807 Gly_GCC_89 0.3
ccd_x29807 Gly_GCC_87 0.3
ccd_x29807 Gly_GCC_88 0.3
ccd_x20463 Lys_CTT_12 0.1

Я хочу сохранить значения (после x) в новом столбце. Таким образом, результат должен выглядеть так:

    col1      col2   col3 col4
ccd_x29807 Gly_GCC_89 0.3 29807
ccd_x29807 Gly_GCC_87 0.3 29807
ccd_x29807 Gly_GCC_88 0.3 29807
ccd_x20463 Lys_CTT_12 0.1 20463

Я пробовал это, но он помещает 29807 во все строки:

df1$col1 %>% 
  mutate(col4 = str_split(samples, "x")[[1]][2])'

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Можно использовать отдельно от пакета tidyr.

library(tidyr)

df <- data.frame(
  col1 = c("ccd_x29807", "ccd_x29807", "ccd_x29807", "ccd_x20463"),
  col2 = c("Gly_GCC_89", "Gly_GCC_87", "Gly_GCC_88", "Lys_CTT_12"),
  col3 = c(0.3, 0.3, 0.3, 0.1)
)

df %>%
  mutate(col_temp = col1) %>%
  separate("col_temp", into = c(NA, "col4"), sep = "x")

Вывод:

        col1       col2 col3  col4
1 ccd_x29807 Gly_GCC_89  0.3 29807
2 ccd_x29807 Gly_GCC_87  0.3 29807
3 ccd_x29807 Gly_GCC_88  0.3 29807
4 ccd_x20463 Lys_CTT_12  0.1 20463
0 голосов
/ 05 мая 2020

Один из способов сделать это - использовать функцию stringr s str_extract:

Данные:

df <- data.frame(col1 = c("ccd_x29807","ccd_x29807","ccd_x29807","ccd_x20463"))

Решение:

df$col2 <- str_extract_all(df$col1, "(?<=x)\\d+")

Это решение делает использование положительного просмотра назад: эта часть регулярного выражения (?<=x) воплощает инструкцию «если в строке, которую вы видите слева, - x», тогда как эта часть регулярного выражения \\d+ соответствует числу, повторяемому один или несколько раз.

Другое решение base R - через gsub и обратную ссылку \\1:

df$col2 <- gsub(".*x(\\d+)", "\\1", df$col1)

В качестве альтернативы, если вы предпочитаете dplyr:

df$col2 <- df %>% 
  mutate(col1 = str_extract_all(col1, "(?<=x)\\d+"))

Результат :

df
        col1  col2
1 ccd_x29807 29807
2 ccd_x29807 29807
3 ccd_x29807 29807
4 ccd_x20463 20463
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...