data.table中dplyr rowwsie combn的等效值
我有一段代码,它对特定数据帧的所有值执行combn。这是通过使用dplyr行方式完成的data.table中dplyr rowwsie combn的等效值,r,data.table,R,Data.table,我有一段代码,它对特定数据帧的所有值执行combn。这是通过使用dplyr行方式完成的 library(dplyr,warn.conflicts = FALSE) library(tidyr) Column1<-c("red","blue")#creating column1 Column2<-c("green","white")#creating column2 Column3<-c("
library(dplyr,warn.conflicts = FALSE)
library(tidyr)
Column1<-c("red","blue")#creating column1
Column2<-c("green","white")#creating column2
Column3<-c("aqua","magenta")#creating column2
df_1<-data.frame(Column1, Column2, Column3)#creating data frame
df_2 <- df_1 %>% rowwise() %>%
mutate(COMB=list(combn(c_across(Column1:Column3),2,simplify = FALSE))) %>%
unnest(cols = COMB) %>%
unnest(cols=COMB)
由v0.3.0于2020年11月7日创建
结果如下
| \# A tibble: 12 x 4 |
|------------------------------------|
| Column1 Column2 Column3 COMB |
| <chr> <chr> <chr> <chr> |
| 1 red green aqua red |
| 2 red green aqua green |
| 3 red green aqua red |
| 4 red green aqua aqua |
| 5 red green aqua green |
| 6 red green aqua aqua |
| 7 blue white magenta blue |
| 8 blue white magenta white |
| 9 blue white magenta blue |
| 10 blue white magenta magenta |
| 11 blue white magenta white |
| 12 blue white magenta magenta |
library(data.table)
Column1<-c("red","blue")#creating column1
Column2<-c("green","white")#creating column2
Column3<-c("aqua","magenta")#creating column2
df_1<-data.table(Column1, Column2, Column3)#creating DT
是否可以在data.table中执行按行梳理功能。例如,在以下方面:
| \# A tibble: 12 x 4 |
|------------------------------------|
| Column1 Column2 Column3 COMB |
| <chr> <chr> <chr> <chr> |
| 1 red green aqua red |
| 2 red green aqua green |
| 3 red green aqua red |
| 4 red green aqua aqua |
| 5 red green aqua green |
| 6 red green aqua aqua |
| 7 blue white magenta blue |
| 8 blue white magenta white |
| 9 blue white magenta blue |
| 10 blue white magenta magenta |
| 11 blue white magenta white |
| 12 blue white magenta magenta |
library(data.table)
Column1<-c("red","blue")#creating column1
Column2<-c("green","white")#creating column2
Column3<-c("aqua","magenta")#creating column2
df_1<-data.table(Column1, Column2, Column3)#creating DT
由v0.3.0和data.table于2020-11-07创建,我们可以使用Map创建“梳”
在哪里
使用data.table,我们可以使用Map创建“COMB”
在哪里
您可以获取长格式的数据,并为每行创建组合
library(data.table)
df_1[, row := seq_len(.N)]
df_2 <- melt(df_1, id.vars = 'row')
df_1[df_2[, combn(value, 2), row], on = 'row'][, row := NULL][]
# Column1 Column2 Column3 V1
# 1: red green aqua red
# 2: red green aqua green
# 3: red green aqua red
# 4: red green aqua aqua
# 5: red green aqua green
# 6: red green aqua aqua
# 7: blue white magenta blue
# 8: blue white magenta white
# 9: blue white magenta blue
#10: blue white magenta magenta
#11: blue white magenta white
#12: blue white magenta magenta
您可以获取长格式的数据,并为每行创建组合
library(data.table)
df_1[, row := seq_len(.N)]
df_2 <- melt(df_1, id.vars = 'row')
df_1[df_2[, combn(value, 2), row], on = 'row'][, row := NULL][]
# Column1 Column2 Column3 V1
# 1: red green aqua red
# 2: red green aqua green
# 3: red green aqua red
# 4: red green aqua aqua
# 5: red green aqua green
# 6: red green aqua aqua
# 7: blue white magenta blue
# 8: blue white magenta white
# 9: blue white magenta blue
#10: blue white magenta magenta
#11: blue white magenta white
#12: blue white magenta magenta
非常感谢@akrun。这是我想要的结果。它工作得很好。我是data.table的新手,我有一个后续问题要问你。如果DT由Column1,Column2,Column3,Column4,Column5组成,而我只想将Column1,Column4,Column5作为x传递给combnx,2,那么我如何调整您的解决方案dfu 1[,grp:=seq_len.N][df u 1[,combnunlist.SD,2,.grp],on=.grp][,grp:=NULL]到该值?AFAIR Map只能换行到mapply,mapply的API对我来说总是更容易使用。如果DT中存在不需要的combn列,那么调整akrun的解决方案以适应该场景df_1Many感谢@akrun。这是我想要的结果。它工作得很好。我是data.table的新手,我有一个后续问题要问你。如果DT由Column1,Column2,Column3,Column4,Column5组成,而我只想将Column1,Column4,Column5作为x传递给combnx,2,那么我如何调整您的解决方案dfu 1[,grp:=seq_len.N][df u 1[,combnunlist.SD,2,.grp],on=.grp][,grp:=NULL]到该值?AFAIR Map只能换行到mapply,mapply的API对我来说总是比较容易使用的。如果DT中存在不需要的combn列,那么调整akrun的解决方案以适应该场景df_1
library(data.table)
df_1[, row := seq_len(.N)]
df_2 <- melt(df_1, id.vars = 'row')
df_1[df_2[, combn(value, 2), row], on = 'row'][, row := NULL][]
# Column1 Column2 Column3 V1
# 1: red green aqua red
# 2: red green aqua green
# 3: red green aqua red
# 4: red green aqua aqua
# 5: red green aqua green
# 6: red green aqua aqua
# 7: blue white magenta blue
# 8: blue white magenta white
# 9: blue white magenta blue
#10: blue white magenta magenta
#11: blue white magenta white
#12: blue white magenta magenta