Создайте новый столбец в R на основе содержимого другого столбца [укажите c case] - PullRequest
1 голос
/ 05 августа 2020

Я ищу умный способ изменить свой data.set. Если мне удастся это сделать, это сэкономит много времени

мой набор данных выглядит так

column1 
1.0
1.0
2.0
2.0.15
0.0
1.0.30

, и я хотел бы создать новый «родительский столбец», в котором я сохраню первый часть столбца 1

column1  column2
1.0        1
1.0        1
2.0        2
2.0.15     2.0
0.0        0
1.0.30     1.0

Причина, по которой я хочу это сделать, состоит в том, что я хочу воссоздать отношения родитель-потомок между элементами. Столбец 2 должен быть родителями, а столбец 1 - его потомками. Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 05 августа 2020

Один вариант с использованием tidyverse и регулярного выражения:

library(tidyverse)

orig <- tribble(
  ~column1, 
  "1.0",
  "1.0",
  "2.0",
  "2.0.15",
  "0.0",
  "1.0.30"
)

orig
#> # A tibble: 6 x 1
#>   column1
#>   <chr>  
#> 1 1.0    
#> 2 1.0    
#> 3 2.0    
#> 4 2.0.15 
#> 5 0.0    
#> 6 1.0.30

orig %>% 
  mutate(parent = str_replace(column1, "\\.\\d+$", ""))
#> # A tibble: 6 x 2
#>   column1 parent
#>   <chr>   <chr> 
#> 1 1.0     1     
#> 2 1.0     1     
#> 3 2.0     2     
#> 4 2.0.15  2.0   
#> 5 0.0     0     
#> 6 1.0.30  1.0

Создано 05.08.2020 с помощью пакета (v0.3.0)

Регулярное выражение \\.\\d+$ принимает буквальную точку ., за которой следует одна или несколько цифр, за которыми следует конец строки $, и заменяет это совпадение ничем "". См. Также https://regexr.com/59lnl (где конец строки $ заменяется новой строкой \n).

1 голос
/ 05 августа 2020
df$column2 <- sub("\\.[0-9]+$", "", df$column1)
df
#   column1 column2
# 1     1.0       1
# 2     1.0       1
# 3     2.0       2
# 4  2.0.15     2.0
# 5     0.0       0
# 6  1.0.30     1.0

Данные

df <- data.frame(column1 = c("1.0", "1.0", "2.0", "2.0.15", "0.0", "1.0.30"))
1 голос
/ 05 августа 2020

Попробуйте это:

#Data
df <- structure(list(column1 = c("1.0", "1.0", "2.0", "2.0.15", "0.0", 
"1.0.30")), row.names = c(NA, -6L), class = "data.frame")
#Code
#Create column
df$column2 <- sub("^(.*)[.].*", "\\1", df$column1)

Вывод:

  column1 column2
1     1.0       1
2     1.0       1
3     2.0       2
4  2.0.15     2.0
5     0.0       0
6  1.0.30     1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...