我已经检查了文档:
https://dataframes.juliadata.org/stable/man/comparisons/#Comparison-with-the-R-package-data.table
但我缺少经常与 data.table 一起使用的以下命令,并且我很难找到这些命令的解决方案。
我正在重复使用相同的示例:
library(data.table)
df <- data.table(grp = rep(1:2, 3), x = 6:1, y = 4:9,
z = c(3:7, NA), id = letters[1:6])
df
grp x y z id
1: 1 6 4 3 a
2: 2 5 5 4 b
3: 1 4 6 5 c
4: 2 3 7 6 d
5: 1 2 8 7 e
6: 2 1 9 NA f
Run Code Online (Sandbox Code Playgroud)
按组获取行数:
df[, .N, by=grp]
grp N
1: 1 3
2: 2 3
Run Code Online (Sandbox Code Playgroud)
添加一个按组索引的列:
df[, idx := 1:.N, by=grp]
> df
grp x y z id idx
1: 1 6 4 3 a 1
2: 2 5 5 4 b 1
3: 1 4 6 5 c 2
4: 2 3 7 6 d 2
5: 1 2 8 7 e 3
6: 2 1 9 NA f 3
Run Code Online (Sandbox Code Playgroud)
添加一列作为每个组的索引。当然这里我们已经有 grp 作为数字索引,但情况往往并非如此。
df[, grp_index := .GRP, by=grp]
df
grp x y z id idx grp_index
1: 1 6 4 3 a 1 1
2: 2 5 5 4 b 1 2
3: 1 4 6 5 c 2 1
4: 2 3 7 6 d 2 2
5: 1 2 8 7 e 3 1
6: 2 1 9 NA f 3 2
Run Code Online (Sandbox Code Playgroud)
有几种方法可以做到这一点。这是一个例子:
\njulia> using DataFrames\n\njulia> df = DataFrame(grp = repeat(1:2, 3), x = 6:-1:1, y = 4:9,\n z = [3:7; missing], id = 'a':'f')\n6\xc3\x975 DataFrame\n Row \xe2\x94\x82 grp x y z id\n \xe2\x94\x82 Int64 Int64 Int64 Int64? Char\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 6 4 3 a\n 2 \xe2\x94\x82 2 5 5 4 b\n 3 \xe2\x94\x82 1 4 6 5 c\n 4 \xe2\x94\x82 2 3 7 6 d\n 5 \xe2\x94\x82 1 2 8 7 e\n 6 \xe2\x94\x82 2 1 9 missing f\n\njulia> gdf = groupby(df, :grp)\nGroupedDataFrame with 2 groups based on key: grp\nFirst Group (3 rows): grp = 1\n Row \xe2\x94\x82 grp x y z id\n \xe2\x94\x82 Int64 Int64 Int64 Int64? Char\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 6 4 3 a\n 2 \xe2\x94\x82 1 4 6 5 c\n 3 \xe2\x94\x82 1 2 8 7 e\n\xe2\x8b\xae\nLast Group (3 rows): grp = 2\n Row \xe2\x94\x82 grp x y z id\n \xe2\x94\x82 Int64 Int64 Int64 Int64? Char\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 2 5 5 4 b\n 2 \xe2\x94\x82 2 3 7 6 d\n 3 \xe2\x94\x82 2 1 9 missing f\n\njulia> combine(gdf, nrow)\n2\xc3\x972 DataFrame\n Row \xe2\x94\x82 grp nrow\n \xe2\x94\x82 Int64 Int64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 3\n 2 \xe2\x94\x82 2 3\n\njulia> transform!(gdf, :grp => eachindex => :idx)\n6\xc3\x976 DataFrame\n Row \xe2\x94\x82 grp x y z id idx\n \xe2\x94\x82 Int64 Int64 Int64 Int64? Char Int64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 6 4 3 a 1\n 2 \xe2\x94\x82 2 5 5 4 b 1\n 3 \xe2\x94\x82 1 4 6 5 c 2\n 4 \xe2\x94\x82 2 3 7 6 d 2\n 5 \xe2\x94\x82 1 2 8 7 e 3\n 6 \xe2\x94\x82 2 1 9 missing f 3\n\njulia> df.grp_index = groupindices(gdf)\n6-element Vector{Union{Missing, Int64}}:\n 1\n 2\n 1\n 2\n 1\n 2\n\njulia> df\n6\xc3\x977 DataFrame\n Row \xe2\x94\x82 grp x y z id idx grp_index\n \xe2\x94\x82 Int64 Int64 Int64 Int64? Char Int64 Int64?\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 6 4 3 a 1 1\n 2 \xe2\x94\x82 2 5 5 4 b 1 2\n 3 \xe2\x94\x82 1 4 6 5 c 2 1\n 4 \xe2\x94\x82 2 3 7 6 d 2 2\n 5 \xe2\x94\x82 1 2 8 7 e 3 1\n 6 \xe2\x94\x82 2 1 9 missing f 3 2\n
Run Code Online (Sandbox Code Playgroud)\n正如 @phipsgabler 所评论的,如果您想要使用非标准评估语法,您还可以使用 DataFramesMeta.jl 或 DataFrameMacros.jl 包(上面我使用的代码不依赖于非标准评估,而只使用标准 Julia 语法)。
\n如果您愿意,还可以使用 Chain.jl 链接这些操作。
\n 归档时间: |
|
查看次数: |
384 次 |
最近记录: |