自动从对象中撤消多个变量

时间:2009-09-13 23:42:28

标签: r

这是我的情况。我有一个使用read.spss创建的对象。

> a <- read.spss(...)
> attach(a)

现在,在这个对象a中,我想提出一系列问题,这些问题遵循一系列问题数字:

> q3 <- data.frame(q3_1, q3_2, q3_4, ... q3_27)

有没有办法让它自动化,从而将从q3_开始的所有问题从原始对象中提取到新的q3 data.frame

我尝试使用paste功能无效。

> q3 <- data.frame(paste("q3_",1:27,sep=""))

只返回带有粘贴序列的data.frame

理想情况下,我想从一个以qX_开头的问题中提取所有内容,因为某些值缺失或过时。

3 个答案:

答案 0 :(得分:5)

可能性包括grepmatch%in%。以下是使用grep的解决方案:

R> foo <- data.frame(q1_1=1:4, q1_2=11:14, q2_1=21:24, q2_2=31:34, q3_1=41:44, q3_2=51:54)
R> colnames(foo)
[1] "q1_1" "q1_2" "q2_1" "q2_2" "q3_1" "q3_2"
R> grep("q3_", colnames(foo))
[1] 5 6
R> q3 <- foo[, grep("q3_", colnames(foo))]
R> q3
  q3_1 q3_2
1   41   51
2   42   52
3   43   53
4   44   54
R> 

答案 1 :(得分:2)

q3 <- a[,grep("q3_",colnames(a))]

答案 2 :(得分:0)

我只是做了类似的事情:

q3 <- data.frame(a[paste('q3_',1:27,sep='')])

如果您愿意,您仍然可以使用attach(a)(如果“a”中没有名为“a”的元素,但没有必要。