2009-09-13 2 views
3

Вот моя ситуация. У меня есть объект, который я создал с помощью 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_, так как некоторые значения отсутствуют или устарели.

ответ

5

Среди возможных возможностей: grep, match и %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> 
0

Я бы просто сделать что-то вроде:

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

Вы все еще можете использовать attach(a), если вам нравится (а если нет элемента в ' a 'named' a '), но в этом нет необходимости.

Смежные вопросы