War*_*ang 3 python r julia dataframes.jl
ds = Dataset([[1, 1, 1, 2, 2, 2],
["foo", "bar", "monty", "foo", "bar", "monty"],
["a", "b", "c", "d", "e", "f"],
[1, 2, 3, 4, 5, 6]], [:g, :key, :foo, :bar])
Run Code Online (Sandbox Code Playgroud)
在InmemoryDatasets中,transpose函数可以传递列选择器的Tuple。
transpose(groupby(ds, :g), (:foo, :bar), id = :key)
Run Code Online (Sandbox Code Playgroud)
Result:
g foo bar monty foo_1 bar_1 monty_1
identity identity identity identity identity identity identity
Int64? String? String? String? Int64? Int64? Int64?
1 1 a b c 1 2 3
2 2 d e f 4 5 6
Run Code Online (Sandbox Code Playgroud)
问题:
我如何在 DataFrames.jl 中执行此操作?
我怎样才能在 R 和 Python 中做到这一点?
在 中R,pivot_wider可用于重塑。
library(tidyr)\npivot_wider(ds, names_from = key, values_from = c(foo, bar))\nRun Code Online (Sandbox Code Playgroud)\n-输出
\n# A tibble: 2 \xc3\x97 7\n g foo_foo foo_bar foo_monty bar_foo bar_bar bar_monty\n <dbl> <chr> <chr> <chr> <int> <int> <int>\n1 1 a b c 1 2 3\n2 2 d e f 4 5 6\nRun Code Online (Sandbox Code Playgroud)\n如果我们想要获得相同的列名,我们可以将rename列
library(dplyr)\nlibrary(stringr)\n ds %>% \n rename("grp"= 'foo', '1' = 'bar') %>% \n pivot_wider(names_from = key, values_from = c("grp", `1`), \n names_glue = "{key}_{.value}") %>% \n rename_with(~ str_remove(.x, "_grp"), ends_with('_grp'))\nRun Code Online (Sandbox Code Playgroud)\n-输出
\n# A tibble: 2 \xc3\x97 7\n g foo bar monty foo_1 bar_1 monty_1\n <dbl> <chr> <chr> <chr> <int> <int> <int>\n1 1 a b c 1 2 3\n2 2 d e f 4 5 6\nRun Code Online (Sandbox Code Playgroud)\nds <- structure(list(g = c(1, 1, 1, 2, 2, 2), key = c("foo", "bar", \n"monty", "foo", "bar", "monty"), foo = c("a", "b", "c", "d", \n"e", "f"), bar = 1:6), class = "data.frame", row.names = c(NA, \n-6L))\nRun Code Online (Sandbox Code Playgroud)\n