【问题标题】:unlist my words into a df but keep all other columns?将我的话取消列出到 df 但保留所有其他列?
【发布时间】:2021-04-16 23:14:24
【问题描述】:

我有一堆与日期和唯一标识符匹配的句子。我想让每一行都成为一个新词,但要让它与日期和唯一标识符相匹配。所以

| I am happy   | 24/12  | 3 |

会改成

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

我需要它的数据框形式。

【问题讨论】:

  • 你能输入一个伪代码吗?这样我们才能准确地帮助您

标签: r list dataframe join


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    我想你可以试试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"
    

    【讨论】:

      【解决方案3】:

      如果你的数据框是这样的:

      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
      

      您可以从tidytext 使用unnest_tokens

      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
      

      【讨论】:

        【解决方案4】:

        我们可以使用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))
        

        【讨论】:

          猜你喜欢
          • 2021-02-23
          • 1970-01-01
          • 2014-11-29
          • 2022-11-23
          • 2021-10-26
          • 2019-04-16
          • 2021-12-23
          • 1970-01-01
          • 2022-07-21
          相关资源
          最近更新 更多