我有两个数据帧,每个数据帧有3列,每个数据帧由不同的数据类型组成(df1有连续数据,列名后缀为"con",df2有分类数据,列名后缀为"cat")。
我的数据:
df1 <- data.frame(t1_con=c(1:5), t2_con=c(6:10), t3_con=c(11:15))
df2 <- data.frame(t1_cat=letters[1:5], t2_cat=letters[6:10], t3_cat=letters[11:15]))我想要获取列名的所有组合,即t1_con、t2_con、t3_cat我已经尝试过此代码:
df3 <- cbind(df1, df2)
results <- combn(names(df3),3,simplify=FALSE)
trait_combinations <- melt(results)这给了我类似的组合: t1_con,t2_con,t1_cat,它有一个t1的副本。但是,我不想要任何重复的t1,t2或t3。例如,组1是好的,因为组中有t1、t2和t3,但组2有t1的副本:
head(trait_combinations)
value L1
1 t1_con 1
2 t2_con 1
3 t3_con 1
4 t1_con 2
5 t2_con 2
6 t1_cat 2有没有办法防止在combn中发生重复,或者在后期删除重复的字符串?我可以删除后缀,但我需要知道哪些列是连续的和分类的,以便进一步分析。
谢谢你的帮助。
发布于 2020-04-02 22:28:04
您可以使用expand.grid()生成所有8种组合。
expand.grid(Map(c, names(df1), names(df2), USE.NAMES = F))
# Var1 Var2 Var3
# 1 t1_con t2_con t3_con
# 2 t1_cat t2_con t3_con
# 3 t1_con t2_cat t3_con
# 4 t1_cat t2_cat t3_con
# 5 t1_con t2_con t3_cat
# 6 t1_cat t2_con t3_cat
# 7 t1_con t2_cat t3_cat
# 8 t1_cat t2_cat t3_cat描述
首先,使用Map创建一个列表,表示3组候选变量:
Map(c, names(df1), names(df2), USE.NAMES = F)
[[1]]
[1] "t1_con" "t1_cat"
[[2]]
[1] "t2_con" "t2_cat"
[[3]]
[1] "t3_con" "t3_cat"然后,expand.grid()将从每组中选择一个变量,从而生成所有8个组合。
发布于 2020-04-02 22:49:32
您可以尝试使用
do.call(expand.grid,
data.frame(rbind(names(df1),names(df2))))这给了我们
X1 X2 X3
1 t1_con t2_con t3_con
2 t1_cat t2_con t3_con
3 t1_con t2_cat t3_con
4 t1_cat t2_cat t3_con
5 t1_con t2_con t3_cat
6 t1_cat t2_con t3_cat
7 t1_con t2_cat t3_cat
8 t1_cat t2_cat t3_cathttps://stackoverflow.com/questions/60993589
复制相似问题