根据选定的变量/列名称过滤R数据框并子设置R数据框

人气:925 发布:2022-10-16 标签: r filtering subset

问题描述

我正在尝试子集一个包含许多变量/列名的大型数据集,比如ax1、ax2、ax3、ax4、ax5、...、ax20、bx1...bx20、zx1...zx20。例如,假设我要获取的子集数据位于变量ax3、ax5、ax11、ax19、...、bx3、bx5、cx11、cx19、...、zx3、zx5、zx11、zx19上。

我在R中尝试了以下代码,但它变得非常冗长和笨拙。

setwd("")
abc<- read.table("abc.txt", header=TRUE)
new.abc<-data.frame(abc$ax3,abc$ax5,abc$ax5,abc$ax11,abc$ax19,  
abc$bx3,abc$bx5,abc$bx5,abc$bx11,abc$bx19)

代码越来越长,因为我需要继续使用cx3、cx5、cx11、cx19、...、zx3、xz5、zx11、zx19。我正在寻找一种替代方法,可以避免这种冗长的编码。非常感谢您的帮助。

推荐答案

您可以通过编程方式创建列。如果他们遵循问题中提到的相同结构,我们可以

cols <- c(outer(paste0(letters, "x"), c(3, 5, 11, 19), paste0))
cols
#[1] "ax3"  "bx3"  "cx3"  "dx3"  "ex3"  "fx3"  "gx3"  "hx3"  "ix3"  "jx3"  "kx3"...

然后使用它来设置数据帧的子集

new.abc[, cols]

如果我们还想保持列顺序,可以使用gtools::mixedsort

new.abc[, gtools::mixedsort(cols)]

796