Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
176 views
in Technique[技术] by (71.8m points)

Delete nonsense columns in r

I have this data

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")

and this function

comb <- as.data.frame(combn(vector, 4))
comb

which gives me this table

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
> 

and I need to delete these columns which has the same names (before _UP or _D) both in one column. It means, for example, delete V1:V20 (always the same name twice) and first column which I need is V21.

I have huge dataset, this is only example, any advice how to do it? thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To omit columns with duplicated string stems you can do the following, which subsets data frame with a logical vector that results from checking each column for duplication of the string stem:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...