Имена в моих df разделены на имена, фамилии, а иногда и отчества (M.), как поместить их все в один столбец во всех моих df? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть определенное количество df, из которых я хочу изменить имена столбцов, но у них нет количества столбцов, потому что для некоторых данных у меня есть Отчество. Который не обязательно должен быть там.

Например,

    df1
  X1 X2   X3   X4     X5     X6
1 A yyyy Name  M. Surname    Word1
2 A yyyy Name  M. Surname    Word1
3 A yyyy Name  M. Surname    Word1

df2
   X1 X2   X3      X4     X5
1 A yyyy Name   Surname   Word1
2 A yyyy Name   Surname   Word1
3 A yyyy Name   Surname   Word1

Что я хочу для всех моих df (включая отчество, если оно присутствует)

  Element Year         Name                 Element2
1 A      yyyy      Name (M.)  Surname          Word1
2 A      yyyy      Name (M.)  Surname          Word1
3 A      yyyy      Name (M.)  Surname          Word1

Я создал операторы ifelse на основе регулярного выражения для определения шаблонов отчества ("[AZ] [.] +"). Что странно, так это то, что он работает на regex101.com и regexr.com для имен, которые у меня есть в моих df, но при применении к консоли R в качестве теста он возвращает

FALSE

regex применяется так

names(df)[4] <- ifelse("[A-Z][.]+") %in% df$X4, "Middle Name", "Name")

Большое спасибо заранее за вашу помощь

1 Ответ

0 голосов
/ 04 апреля 2020

Проблема заключается в вашем состоянии в ifelse, которое вы можете проверить

"[A-Z][.]+" %in% df1$X4
[1] FALSE

Возвращается FALSE, поэтому вы получаете условие else.

Чтобы получить условие, которое возвращает TRUE:

library(stringr)
all(str_detect(df1$X4, "[A-Z][.]+"))
[1] TRUE

Так что используйте

names(df1)[4] <- ifelse(all(str_detect(df1$X4, "[A-Z][.]+")), "Middle Name", "Name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...