Строка R генерируется из столбца фрейма данных - PullRequest
0 голосов
/ 12 апреля 2019

Предположим, у меня есть Dataframe в R с двумя столбцами

Name,Number

sample Dataset
"PETER","15401",
"SAMMY","68475"

, теперь для каждой строки я хочу создать новый столбец со значениями <1st Digit in the Reverse of Number><First 3 digits in name><2nd Digit in Reverse of the number.>

, поэтому решение дляприведенный выше набор данных должен быть

for 1.
"1PET0"
for 2
"5SAM7"

Я новичок в R, поэтому, пожалуйста, скажите мне, как это сделать.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Пакет stringi пригодится из-за его stri_reverse -функции:

dat <- read.table(header = TRUE, text = "Name,Number
PETER,15401
SAMMY,68475", sep = ",") 

dat$new <- paste0(substr(stringi::stri_reverse(dat$Number), 1, 1), 
                  substr(dat$Name, 1, 3), 
                  substr(stringi::stri_reverse(dat$Number), 2, 2))

dat
#>    Name Number   new
#> 1 PETER  15401 1PET0
#> 2 SAMMY  68475 5SAM7

Использование dplyr:

library(dplyr)    
read.table(header = TRUE, text = "Name,Number
PETER,15401
SAMMY,68475", sep = ",") %>% 
  mutate(new = paste0(substr(stringi::stri_reverse(Number), 1, 1), 
                      substr(Name, 1, 3), 
                      substr(stringi::stri_reverse(Number), 2, 2)))
#>    Name Number   new
#> 1 PETER  15401 1PET0
#> 2 SAMMY  68475 5SAM7
0 голосов
/ 12 апреля 2019

Мы можем использовать paste с substr

df1$newcol <- with(df1, paste0(substr(Number, nchar(Number), nchar(Number)),
            substr(Name, 1, 3), 
           substr(Number, nchar(Number)-1, nchar(Number)-1)))
df1$newcol
#[1] "1PET0" "5SAM7"

данные

df1 <- structure(list(Name = c("PETER", "SAMMY"), Number = c(15401L, 
 68475L)), class = "data.frame", row.names = c(NA, -2L))
...