отменить перечисление моих слов в df, но сохранить все остальные столбцы?

#r #list #dataframe #join

#r #Список #фрейм данных #Присоединиться

Вопрос:

У меня есть куча предложений, которые совпадают с датой и уникальным идентификатором. Я хочу сделать каждую строку новым словом, но сохранить его в соответствии с датой и уникальным идентификатором. Итак

 | I am happy   | 24/12  | 3 |
 

Изменится на

 | I | 24/12 | 3 |
| am | 24/12 | 3 |
| happy | 24/12 | 3 |
 

Мне это нужно в форме фрейма данных.

Комментарии:

1. не могли бы вы, пожалуйста, ввести псевдокод? таким образом, мы поможем вам точно

Ответ №1:

Мы можем просто использовать separate_rows

 library(tidyr)
separate_rows(df, V1)
 

-вывод

 # A tibble: 3 x 3
#  V1    V2       V3
#  <chr> <chr> <int>
#1 I     24/12     3
#2 am    24/12     3
#3 happy 24/12     3
 

данные

 df <- structure(list(V1 = "I am happy", V2 = "24/12", V3 = 3L), 
      class = "data.frame", row.names = c(NA, -1L))
 

Ответ №2:

Попробуйте это:

 library(dplyr)
library(tidyr)
#Data
df <- data.frame(val='I am happy | 24/12 | 3',stringsAsFactors = F)
#Code
new <- df %>% separate(val,into = paste0('V',1:3),sep='\|') %>%
  mutate(across(everything(),~trimws(.))) %>%
  separate_rows(V1,sep = ' ') %>%
  mutate(V3=as.numeric(V3))
 

Вывод:

 # A tibble: 3 x 3
  V1    V2       V3
  <chr> <chr> <dbl>
1 I     24/12     3
2 am    24/12     3
3 happy 24/12     3
 

Ответ №3:

Я думаю, вы можете попробовать unnest fread

 unnest(
  fread(text = paste0(s, "n"))[
    , V1 := .(strsplit(V1, " "))
  ], V1
)
 

что дает

 # A tibble: 3 x 3
  V1    V2       V3
  <chr> <chr> <int>
1 I     24/12     3
2 am    24/12     3
3 happy 24/12     3
 

Данные

 s <- "I am happy | 24/12 | 3"
 

Ответ №4:

Если ваш фрейм данных похож :

 df <- structure(list(V1 = "I am happy", V2 = "24/12", V3 = 3L), 
      class = "data.frame", row.names = c(NA, -1L))
df
#          V1    V2 V3
#1 I am happy 24/12  3
 

Вы можете использовать unnest_tokens from tidytext .

 df1 <- tidytext::unnest_tokens(df, V1, V1, to_lower = FALSE)
df1

#       V1    V2 V3
#1       I 24/12  3
#1.1    am 24/12  3
#1.2 happy 24/12  3