반복 측정 설계를위한 긴 형식의 데이터 프레임을 넓은 형식으로 전환하기 위해 기본 R의 모양 변경 기능을 사용하고 있습니다. 아래 장난감 데이터 세트를 참조하세요. 질문 1, 2, 3은 3 개 항목 설문 조사에 대한 개별 응답입니다. 설문 조사에 각각 4 번씩 응시하는 4 명의 참가자가 있습니다.
Q1 <- c(2,6,5,4,3,8,9,2,1,5,4,7,3,7,2,1)
Q2 <- c(4,7,6,3,1,2,5,6,7,5,4,3,5,6,6,3)
Q3 <- c(7,9,3,1,5,3,7,5,3,3,5,7,8,9,9,3)
Participant <- rep(c("Bob","Sue","Jim","Tom"), times = 1, each = 4)
Time <- rep(c("FirstSurvey","SecondSurvey","ThirdSurvey","FourthSurvey"), times = 4)
m <- as.data.frame(cbind(Participant, Time, Q1, Q2, Q3))
이것은 다음 데이터 프레임을 생성합니다.
m
Participant Time Q1 Q2 Q3
1 Bob FirstSurvey 2 4 7
2 Bob SecondSurvey 6 7 9
3 Bob ThirdSurvey 5 6 3
4 Bob FourthSurvey 4 3 1
5 Sue FirstSurvey 3 1 5
6 Sue SecondSurvey 8 2 3
7 Sue ThirdSurvey 9 5 7
8 Sue FourthSurvey 2 6 5
9 Jim FirstSurvey 1 7 3
10 Jim SecondSurvey 5 5 3
11 Jim ThirdSurvey 4 4 5
12 Jim FourthSurvey 7 3 7
13 Tom FirstSurvey 3 5 8
14 Tom SecondSurvey 7 6 9
15 Tom ThirdSurvey 2 6 9
16 Tom FourthSurvey 1 3 3
그런 다음 모양을 변경하면 :
mReshaped <- reshape(m, idvar = "Participant", timevar = "Time", direction = "wide", sep = "", new.row.names = c(1,2,3,4))
다음과 같은 와이드 포맷 데이터 프레임을 생성합니다.
mReshaped
Participant Q1FirstSurvey Q2FirstSurvey Q3FirstSurvey Q1SecondSurvey Q2SecondSurvey
1 Bob 2 4 7 6 7
2 Sue 3 1 5 8 2
3 Jim 1 7 3 5 5
4 Tom 3 5 8 7 6
Q3SecondSurvey Q1ThirdSurvey Q2ThirdSurvey Q3ThirdSurvey Q1FourthSurvey Q2FourthSurvey
1 9 5 6 3 4 3
2 3 9 5 7 2 6
3 3 4 4 5 7 3
4 9 2 6 9 1 3
Q3FourthSurvey
1 1
2 5
3 7
4 3
다음 열 이름으로
colnames(mReshaped)
[1] "Participant" "Q1FirstSurvey" "Q2FirstSurvey" "Q3FirstSurvey" "Q1SecondSurvey"
[6] "Q2SecondSurvey" "Q3SecondSurvey" "Q1ThirdSurvey" "Q2ThirdSurvey" "Q3ThirdSurvey"
[11] "Q1FourthSurvey" "Q2FourthSurvey" "Q3FourthSurvey"
데이터 프레임의 모양이 변경 될 때 볼 수 있듯이 reshape 함수는 반복되는 각 측정 값의 열 이름에 접미사로 시간 변수를 추가합니다.
각 Value 변수 이름 앞에 Time 변수를 접두어로 넣을 수 있도록 reshape 함수에 인수가 있는지 아는 사람이 있습니까?
내에서 순서를 변경할 수 있는지 확실하지 reshape
않지만 나중에 gsub
정규 표현식을 사용하여 변경할 수 있습니다 .
names(mReshaped) = gsub("(Q[0-9])(.*)", "\\2\\1", names(mReshaped))
[1] "Participant" "FirstSurveyQ1" "FirstSurveyQ2" "FirstSurveyQ3" "SecondSurveyQ1"
[6] "SecondSurveyQ2" "SecondSurveyQ3" "ThirdSurveyQ1" "ThirdSurveyQ2" "ThirdSurveyQ3"
[11] "FourthSurveyQ1" "FourthSurveyQ2" "FourthSurveyQ3"
업데이트 : 코드 작동 방식에 대한 설명 : 코드는 처음 볼 때 매우 모호한 텍스트 처리 언어 인 정규식 (또는 줄여서 "정규식")을 사용합니다.
이 경우 Q[0-9]
"Q"다음에 숫자가 일치 함을 의미합니다. (Q[0-9])
해당 일치를 "캡처 그룹"으로 변환하여 나중에 다시 참조 할 수 있습니다. 이것은 캡처 그룹 # 1입니다.
.*
나머지 모든 문자와 일치 함을 의미합니다 (와 일치하는 항목 뒤에 오는 모든 항목 Q[0-9]
). .
단일 문자와 일치 함을 의미합니다. 추가 *
는 모든 길이의 문자열과 일치 함을 의미합니다. (.*)
경기를 캡처 그룹 # 2로 바꿉니다.
\\2\\1
캡처 한 두 문자열을 가져 와서 순서를 바꿉니다.
정규식은 이와 같은 텍스트 조작 작업에 매우 유용 할 수 있습니다. 이에 대해 자세히 알아볼 수있는 몇 곳은 여기 , 여기 , 여기입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다