Преобразовать (перемешать) всего 2 поля в кадре данных - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть фрейм данных с именем, фамилией, и я хочу переставить их, но ТОЛЬКО для строк, которые имеют значения.Есть много пустых полей, и я не хочу переупорядочивать их, чтобы всегда существовало имя первого имени без значения фамилии.Пример:

number<- c(1,2,3,4,5)
firstname<- c('','Eddie','Edward','','Edurardo')
lastname <- c('','Vedder', 'Van Halen', '', 'Norton')
permtest <- data.frame(number,firstname,lastname)
permtest
  number firstname  lastname
1      1                    
2      2     Eddie    Vedder
3      3    Edward Van Halen
4      4                    
5      5  Eduardo    Norton

Ожидаемые результаты будут:

  • Эдди Нортон
  • Эдвард Веддер
  • Эдуардо Ван Хален

Но не:

  • Эдди _____

или:

  • ______ Ван Хален

Iпопробовал функцию преобразования, но она не сработала:

permtest2 <- transform( permtest2, firstname = sample(firstname,lastname) )

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Один из многих способов сделать это:

permtest[permtest == ''] = NA

library(dplyr)

permtest %>% 
  dplyr::filter(!is.na(lastname), !is.na(firstname)) %>% 
  dplyr::mutate(val = paste(firstname, lastname)) %>% 
  dplyr::pull(val)

[1] "Eddie Vedder"     "Edward Van Halen" "Edurardo Norton" 
0 голосов
/ 10 декабря 2018

Используя Tidyverse вы можете сделать

library(tidyverse)
library(stringr)

permtest2 <- permtest %>% mutate(Nfname = str_length(firstname)) %>% filter(Nfname > 0) %>% mutate(lastname = sample(lastname, size = length(lastname))) %>% select(-Nfname)
0 голосов
/ 10 декабря 2018

Помогает только перемешивание непустых записей:

permtest$lastname[permtest$lastname != ''] <- sample(permtest$lastname[permtest$lastname != ''])
permtest
#   number firstname  lastname
# 1      1                    
# 2      2     Eddie Van Halen
# 3      3    Edward    Vedder
# 4      4                    
# 5      5  Edurardo    Norton
...