我有这个数据
vector <- c("Pos_emaO_dO_UP", "Pos_emaO_dO_D", "Pos_emaC_dC_UP", "Pos_emaC_dC_D",
"Pos_emaC_dO_D", "Pos_emaC_dO_UP", "Pos_emaO_dC_UP", "Pos_emaO_dC_D")
和这个功能
comb <- as.data.frame(combn(vector, 4))
comb
给了我这张表
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1 Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP
2 Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D
3 Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D
4 Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D
V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24
1 Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP
2 Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP
3 Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
4 Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D
V25 V26 V27 V28 V29 V30 V31 V32 V33 V34 V35 V36
1 Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_D
2 Pos_emaC_dC_UP Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dC_UP
3 Pos_emaO_dC_UP Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_UP Pos_emaC_dC_D
4 Pos_emaO_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaC_dO_D
V37 V38 V39 V40 V41 V42 V43 V44 V45 V46 V47 V48
1 Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D
2 Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D
3 Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D
4 Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D
V49 V50 V51 V52 V53 V54 V55 V56 V57 V58 V59 V60
1 Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP
2 Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D
3 Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_UP Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
4 Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D
V61 V62 V63 V64 V65 V66 V67 V68 V69 V70
1 Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dO_D
2 Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
3 Pos_emaO_dC_UP Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_UP Pos_emaC_dO_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dC_UP Pos_emaO_dC_UP
4 Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_D Pos_emaO_dC_D
>
我需要在一列中删除这些具有相同名称(在_UP
或_D
之前)的列。这意味着,例如,删除V1:V20
(两次始终使用相同的名称),我需要的第一列是V21
。
我有庞大的数据集,这只是一个例子,任何建议怎么做?感谢
答案 0 :(得分:1)
要省略具有重复字符串词干的列,您可以执行以下操作,使用逻辑向量对数据框进行子集,该逻辑向量是通过检查每列是否存在字符串词干的重复而生成的:
comb[!sapply(comb, function(x) any(duplicated(sub('_D|_UP', '', x))))]
# V21 V22 V23 V24
# 1 Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP
# 2 Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP
# 3 Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
# 4 Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D
# V27 V28 V29 V30
# 1 Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP Pos_emaO_dO_UP
# 2 Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D
# 3 Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
# 4 Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D
# V41 V42 V43 V44
# 1 Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D
# 2 Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP Pos_emaC_dC_UP
# 3 Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
# 4 Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D
# V47 V48 V49 V50
# 1 Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D Pos_emaO_dO_D
# 2 Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D Pos_emaC_dC_D
# 3 Pos_emaC_dO_D Pos_emaC_dO_D Pos_emaC_dO_UP Pos_emaC_dO_UP
# 4 Pos_emaO_dC_UP Pos_emaO_dC_D Pos_emaO_dC_UP Pos_emaO_dC_D
答案 1 :(得分:0)
这是你的想法吗?我的理解是,对于Pos_emaC_dC
,Pos_emaC_dO
,Pos_emaO_dC
和Pos_emaO_dO
中的每一个,您需要*_UP
或*_D
,而不是两者。下面,我根据元素所属的这四对中的哪一对来分割矢量。然后,我们可以使用expand.grid
创建我们的组合,只从每个组中选择一个元素。
expand.grid(split(vector, sub('_D|_UP', '', vector)))
# Pos_emaC_dC Pos_emaC_dO Pos_emaO_dC Pos_emaO_dO
# 1 Pos_emaC_dC_UP Pos_emaC_dO_D Pos_emaO_dC_UP Pos_emaO_dO_UP
# 2 Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaO_dC_UP Pos_emaO_dO_UP
# 3 Pos_emaC_dC_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dO_UP
# 4 Pos_emaC_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dO_UP
# 5 Pos_emaC_dC_UP Pos_emaC_dO_D Pos_emaO_dC_D Pos_emaO_dO_UP
# 6 Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaO_dC_D Pos_emaO_dO_UP
# 7 Pos_emaC_dC_UP Pos_emaC_dO_UP Pos_emaO_dC_D Pos_emaO_dO_UP
# 8 Pos_emaC_dC_D Pos_emaC_dO_UP Pos_emaO_dC_D Pos_emaO_dO_UP
# 9 Pos_emaC_dC_UP Pos_emaC_dO_D Pos_emaO_dC_UP Pos_emaO_dO_D
# 10 Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaO_dC_UP Pos_emaO_dO_D
# 11 Pos_emaC_dC_UP Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dO_D
# 12 Pos_emaC_dC_D Pos_emaC_dO_UP Pos_emaO_dC_UP Pos_emaO_dO_D
# 13 Pos_emaC_dC_UP Pos_emaC_dO_D Pos_emaO_dC_D Pos_emaO_dO_D
# 14 Pos_emaC_dC_D Pos_emaC_dO_D Pos_emaO_dC_D Pos_emaO_dO_D
# 15 Pos_emaC_dC_UP Pos_emaC_dO_UP Pos_emaO_dC_D Pos_emaO_dO_D
# 16 Pos_emaC_dC_D Pos_emaC_dO_UP Pos_emaO_dC_D Pos_emaO_dO_D
答案 2 :(得分:0)
编辑:我找到了解决方案: 我编写了这个函数,让它运行得很好,它可以工作。
subf<-function (x){
rc<-allcombin[[x]][!sapply(allcombin[[x]], function(x) any(duplicated(sub('_D|_UP', '', x))))]
return(rc)
}
lists<-c(1:length(allcombin))
rc_all<-lapply(lists,subf)
我一直在处理@agstudy和@jbaums向我展示的代码 源向量在这里
vrvector<-c("Pos_emaO_dO_UP","Pos_emaO_dO_D","Pos_emaC_dC_UP","Pos_emaC_dC_D","Pos_emaC_dO_D","Pos_emaC_dO_UP","Pos_emaO_dC_UP","Pos_emaO_dC_D")
library(combinat)
rc<-comb[!sapply(comb, function(x) any(duplicated(sub('_D|_UP', '', x))))]
但这是为了与一个df一起工作,如下面的例子
comb<-as.data.frame(combn(vrvector,4))
rc<-comb[!sapply(comb, function(x) any(duplicated(sub('_D|_UP', '', x))))]
但现在我发现这段代码不适用于我需要的列表。所以,如果我使用下面的功能
allcomb<-function (x){
combinations<-as.data.frame(combn(vrvector,x))
return(combinations)
}
vcomb<-c(2:(length(vrvector)/2))
allcombin<-lapply(vcomb,allcomb)
allcombin
并获取df以获取列出的所有可能数量的变量并使用此类函数
rc<-allcombin[!sapply(allcombin, function(x) any(duplicated(sub('_D|_UP', '', x))))]
结果是
list()
代码更改的所有建议是否适用于列表中的所有df以及单个df?感谢