Извлечение имен из фрейма данных в виде отдельных данных в R - PullRequest
0 голосов
/ 11 октября 2019

У меня есть примерный фрейм данных с именем и фамилией. Мне нужно извлечь имена как отдельные данные. У меня была идея сделать это одно за другим для каждого имени, но набор данных велик, и мне нужен более быстрый способ. Вы можете мне помочь?

df<-data.frame(name = c("John Smith", "Antonio Gilbert", "Rickie Hooley", "John Marquez", "Christian Thompson", "Rickie Galvan"),
           telephone = c("234324", "2342343", "547547", "68656486", "5686686", "4664546"))

John <- df[grep("John", df$name), 1]
Rickie <- df[grep("Rickie", df$name), 1]

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Это создаст список фреймов данных, каждый из которых содержит одно из разных имен. Вы можете получить к ним доступ с помощью dflist$John и т. Д.

firstnames <- unique(gsub("\\s.*$", "", df$name))

dflist <- lapply(firstnames, function(x) df[grep(x, df$name), 1, drop = FALSE])

names(dflist) <- firstnames

dflist
$John
          name
1   John Smith
4 John Marquez

$Antonio
             name
2 Antonio Gilbert

$Rickie
           name
3 Rickie Hooley
6 Rickie Galvan

$Christian
                name
5 Christian Thompson
1 голос
/ 11 октября 2019

Мы можем использовать group_split от dplyr

library(dplyr)
library(stringr)
df %>% 
    group_split(nameGroup = str_remove(name, "\\s.*"))
1 голос
/ 11 октября 2019

Если вы хотите разделить кадры данных на основе их имени, мы можем сначала извлечь их имя, а затем split.

output <- split(df, sub("\\s.*", "", df$name))
output

#$Antonio
#             name telephone
#2 Antonio Gilbert   2342343

#$Christian
#                name telephone
#5 Christian Thompson   5686686

#$John
#          name telephone
#1   John Smith    234324
#4 John Marquez  68656486

#$Rickie
#           name telephone
#3 Rickie Hooley    547547
#6 Rickie Galvan   4664546

Итак, теперь у вас есть список кадров данных, к которым может обращатьсяoutput$Antonio, output$Christian и т. Д.

...