基于向量提取数据框列时如何保持指定顺序?
解决R中提取列时保留目标顺序的问题
嘿,我懂你的困扰——你想从数据框df里提取和g匹配的列,但用%in%筛选后列名变成了字母排序的"a" "b" "c",而你想要的是g里原本的a、c、b顺序对吧?
问题根源
你原来的代码colnames(df)[colnames(df) %in% g]是从df的列名列表里挑出在g中的项,所以返回的顺序是df列名的顺序(也就是a、b、c、d里匹配的前三个),自然就不是你想要的g的原始顺序了。
解决方案
换个思路:从g这个目标列名向量出发,筛选出那些在df中存在的列名,这样就能完美保留g的原始顺序啦。
完整的修正代码如下:
# 构建目标列名向量g(和你原来的代码一致) a <- sample(100,10) c <- sample(100,10) b <- sample(100,10) g <- data.frame(a,c,b) g <- colnames(g) # 此时g为 c("a", "c", "b") # 构建包含更多列的数据框df a <- sample(100,10) c <- sample(100,10) b <- sample(100,10) d <- sample(100,10) df <- data.frame(a,b,c,d) # 按g的顺序筛选存在于df的列名 names <- g[g %in% colnames(df)] # 查看结果,会是你期望的顺序 names
执行后names的结果就是"a" "c" "b",完全符合你的需求。如果之后要提取df的对应列,直接用df[, names]就能得到按目标顺序排列的子数据框了。
内容的提问来源于stack exchange,提问作者user11916948
相关产品推荐
相关产品推荐

