问题描述
我正在尝试子集一个包含许多变量/列名的大型数据集,比如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)]