跟进this question,我想执行与t.save(using='default', update_fields=['last_accessed'])
相对应的任务(或下面的MWE中的aggregate
等效项),以便获得 df1 < / strong>再次,从 df2 开始。
此处的任务是从 df2 重现 df1 。为此,我尝试了data.table
,但是当多个变量必须是&#34; dis-aggregated&#34;时,我无法弄清楚如何使其正常工作。 (模型,国家和年)。
保留变量的原始大写也很好。
任何与tidytext::unnest_tokens
不同的优雅解决方案都将被接受!谢谢!
这是MWE:
tidytext::unnest_tokens
答案 0 :(得分:2)
我会使用dplyr::mutate_at()
,stringr::str_split()
和tidyr::unnest()
执行此操作。
library(tidyverse)
df2 %>%
mutate_at(vars(models:years), ~ str_split(., pattern = " /// ")) %>%
unnest()
#> # A tibble: 15 x 4
#> brand models countries years
#> <chr> <chr> <chr> <chr>
#> 1 A A1 P 91
#> 2 A A1 G 92
#> 3 A A2 S 93
#> 4 A A3 S 94
#> 5 B B1 P 98
#> 6 B B2 P 95
#> 7 B B2 F 87
#> 8 B B2 I 99
#> 9 B B3 D 0
#> 10 C C1 S 86
#> 11 C C1 F 92
#> 12 C C2 F 92
#> 13 D D1 G 93
#> 14 D D2 I 95
#> 15 E E1 S 99
请注意,最后一列仍然是chr
类型,因此如果您想将其恢复为数字,则需要再使用一个mutate()
。
答案 1 :(得分:1)
我们可以使用separate_rows
library(tidyverse)
res <- df2 %>%
separate_rows(models, countries, years, convert = TRUE) %>%
rename_all(funs(paste0(names(df1)))) %>% #just to make the column names same as df1
mutate(year = as.numeric(year)) #convert to numeric to match df1 column type
all.equal(res, df1 %>%
mutate_at(2:3, as.character), check.attributes = FALSE )
#[1] TRUE