【问题标题】: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))