簡體   English   中英

r中的嵌套和連接值

[英]Unnest and concatenate values in r

我試圖取消嵌套每個單元格不一定具有相同數量的值的兩個列,然后將兩個列之間具有對應關系的值連接起來。 例如:

library('dplyr')
library('tidyr')

#Sample Data
df <- data.frame(id = c(1:4),
             first.names = c('Michael, Jim', 'Michael, Michael', 'Creed', 'Creed, Jim'),
             last.names = c('Scott, Halpert', 'Scott, Cera', '', 'Halpert'))

並非df $ first.names中的所有值都與df $ last.names中的值相關聯。 我正在嘗試獲得以下結果:

#Desired output
df.results <- data.frame(id = c(1,1,2,2,3,4,4),
                     first.names = c('Michael', 'Jim', 'Michael', 'Michael', 'Creed', 'Creed', 'Jim'),
                     last.names = c('Scott', 'Halpert', 'Scott', 'Cera', '', '', 'Halpert'),
                     full.names = c('Michael Scott', 'Jim Halpert', 'Michael Scott', 'Michael Cera', 'Creed', 'Creed', 'Jim Halpert'))

我嘗試使用unnest,它適用於first.names,但不適用於last.names(它將last.names為空白的行刪除):

#convert to characters
df$first.names <- as.character(df$first.names)
df$last.names <- as.character(df$last.names)

#Unnest first names
df <- df %>% 
      transform(first.names = strsplit(first.names, ',')) %>%
      unnest(first.names)%>%
      transform(last.names = strsplit(last.names, ',')) %>%
      unnest(last.names)

然后,我打算刪除重復的行,但這仍然不能解決df $ first.names中的值而df $ last.names中沒有值的問題

有一個更好的方法嗎?

檢查此解決方案:

library(tidyverse)

df %>%
  as_tibble() %>%
  mutate_at(2:3, ~ strsplit(as.character(.x), ',') %>% map(~ str_trim(.x))) %>%
  mutate(
    First = map2_chr(first.names, last.names, ~ paste(.x[1], .y[1])),
    Second = map2_chr(first.names, last.names, ~ paste(.x[2], .y[2]))
  ) %>%
  mutate_at(4:5, ~ str_remove_all(.x, 'NA') %>% str_trim()) %>%
  gather('x', 'full.names', First:Second) %>%
  filter(full.names != '') %>%
  mutate(
    first.names = map_chr(full.names, ~ str_split(.x, ' ')[[1]][1]),
    last.names = map_chr(full.names, ~ str_split(.x, ' ')[[1]][2]) %>%
      replace_na('')
  ) %>%
  select(-x) %>%
  arrange(id)

我可以包含一個邏輯,即如果有一個last.names ,它將與第二個first.names以獲得相同的結果,但是我認為這不是您想要的。 沒有second.names帶有first.names向量可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM