내 데이터 세트에는 약 54,000 개의 행이 있습니다. 다른 열의 값과 이전에 다른 열의 값이 표시되었는지 여부에 따라 T 또는 F 중 하나에 값 (First_Pass)을 설정하려고합니다. 나는 그것을하기 위해 필요한 것을 정확히 수행하는 for 루프를 가지고있다. 그러나 해당 루프는 데이터의 하위 집합에만 적용됩니다. 요소 수준에 따라 다른 하위 집합에 대해 루프를 개별적으로 실행해야합니다.은 ddply 내에서 사용자 정의 루프를 작동합니다.
이것은 데이터를 부분 집합으로 나누고 함수 (my for 루프)를 적용한 다음 데이터에 다시 가입시키려는 것처럼 plyr 함수의 완벽한 경우와 같습니다. 그러나, 나는 그것을 작동시킬 수 없습니다. 먼저 char.data라는 df 샘플을 제공합니다.
session_id list Sent_Order Sentence_ID Cond1 Cond2 Q_ID Was_y CI CI_Delta character tsle tsoc Direct
5139 2 b 9 25 rc su 25 correct 1 0 T 995 56 R
5140 2 b 9 25 rc su 25 correct 2 1 h 56 56 R
5141 2 b 9 25 rc su 25 correct 3 1 e 56 56 R
5142 2 b 9 25 rc su 25 correct 4 1 56 37 R
거기에 약간의 혼란이 있습니다. 키 열은 session_id, Sentence_ID, CI 및 CI_Delta입니다.
그때 First_Pass라는 컬럼을 초기화에 "F"
char.data $ First_Pass < - "F"
내가 First_Pass이 SESSION_ID의 각 조합에 대한 사실 "T"인 경우 지금 계산하려면 및 Sentence_ID. 장난감 세트를 만들었는데, 이는 전체 로직을 해결하기위한 하나의 서브 세트 일뿐입니다. 다음은 장난감 데이터에 대해 내가 원하는 것을 제공하는 for 루프의 코드입니다.
char.data.toy$First_Pass <- "F"
l <-c(200)
for (i in 1:nrow(char.data.toy)) {
if(char.data.toy[i,]$CI_Delta >= 0 & char.data.toy[i,]$CI %nin% l){
char.data.toy[i,]$First_Pass <- "T"
l <- c(l,char.data.toy[i,]$CI)}
}
이제이 루프를 가져 와서 모든 session_id 및 Sentence_ID 하위 집합에 대해 실행하고 싶습니다. 나는 set_fp라는 함수를 생성하고 그것을 ddply 안에 호출했다. 그 코드는 다음과 같습니다.
#define function
set_fp <- function (df){
l <- 200
for (i in 1:nrow(df)) {
if(df[i,]$CI_Delta >= 0 & df[i,]$CI %nin% l){
df[i,]$First_Pass <- "T"
l <- c(l,df[i,]$CI)}
else df[i,]$First_Pass <- "F"
return(df)
}
}
char.data.fp <- ddply(char.data,c("session_id","Sentence_ID"),function(df)set_fp(df))
불행히도, 이것은 옳지 않습니다. 오랫동안 First_Pass의 모든 "F"값을 얻었습니다. 이제 더 많은 시간이 필요할 때 24 T 값을 얻었습니다. 그래서 마지막 서브셋이나 비슷한 것을 유지할 것입니다. 도움?
이 문제가 해결되었을 수도 있습니다. 나는 for 루프 밖에서 리턴을 옮겼고, 지금은 더 합리적인 보이는 답을 리턴하고있다. 모든 데이터를 검토 한 다음 실제로 맞으면 문서화하고 닫습니다. (게시하기 전에 몇 시간 씩 보았습니다.) – pacatrue