2017-03-24 1 views
0

두 데이터 세트 : ms이 있습니다. 첫 번째 데이터 세트는 변수 Frequency, , p2p3을 포함합니다.두 데이터 세트의 정보 조합하기 _ 루프 기능

번째 세트는 및 샘플 크기 평균 회귀의 유형 값을 포함한다. 열 이름은 각각 z, meansamplesize입니다.

I는 다음과 같이 제 m 세트로 네 개의 열을 추가해야

  • 첫번째 열은 m$reg1m$p1s$z == 'Regression1' 대응 s$samplesize의 값이어야한다.
  • 두 번째 열 m$reg2s$z == 'regression2'에 해당하는 s$samplesize의 값인 m$p2 배가되어야합니다.
  • 제 3 열 m$reg3은 에 해당하는 s$samplesize의 값인 m$p3이어야합니다.

나는이 새로운 4 개의 열을 m 개의 데이터 세트로 계산하기 위해 어떻게 루프 함수를 작성할 수 있는지 궁금합니다. 루프에 대한

Frequency<-seq(1,27,1) 
p1<-seq(2,28,1) 
p2<-seq(10,36,1) 
p3<-seq(0,26,1) 
m<-data.frame(Frequency,p1,p2,p3) 

z<-c('Regression1','Regression2','Regression3','Regression4') 
mean<-c(2,28,1,17) 
samplesize<-c(10,20,30,40) 
s<-data.frame(z,mean,samplesize) 

답변

1

사용하는 것과 동일한 원리를 우리는이 answer 적용한다. 먼저 테이블을 부분 집합하는 열 또는 행 값의 이름을 정의한 다음 계산을 수행하여 값을 새로운 유사하게 구성된 열로 채 웁니다.

# custom function that calculates column values 
add.col <- function(i){ 
    # name in the s$z that defines the correct row 
    reg <- paste0("Regression", i) 
    # name of the m column 
    p <- paste0("p", i) 
    # multiply the named column from m with respective samplesize in s 
    return(m[, p] * s$samplesize[s$z == reg]) 
} 

# loop through all indices 
for(i in 1:3){ 
    # create a new column with the compound name and fill it with appropriate values 
    m[, paste0("reg", i)] <- add.col(i = i) 
} 
+0

도움을 주셔서 감사합니다. – Joe

1

필요를, 내가 제대로 질문을 이해한다면 :

는 데이터 세트가 아래 코드에서 생성되지하는 방법을 참조하십시오. 그냥 수행

m$regr1 <- m$p1*s$samplesize[s$z=="Regression1"] 
m$regr2 <- m$p2*s$samplesize[s$z=="Regression2"] 
m$regr3 <- m$p3*s$samplesize[s$z=="Regression3"] 
0

당신이 루프이 잘 작동 수있는 수행 할 경우

desired_col = c(2,3,4) # this can be any selection 

for(i in desired_col) { m[[paste0(i,"reg")]] = m[,i]*s[match(i,desired_col),3] }

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 그러나 큰 데이터 집합이 있고 열이 연속적이지 않기 때문에 m [, i + 1]을 사용할 수 없습니다. 코드를 수정할 수 있습니까? – Joe

+0

예, 편집 된 버전은 임의의 열을 선택하고 순차적으로 's'에서 첫 번째부터 마지막까지의 샘플 크기 값을 선택합니다. 행의 nr이's'의 행의 nr과 일치한다는 가정이 있습니다. 또한 각 반복에 대해 원하는 샘플 크기를 선택하는 desired_reg를 사용하여 벡터를 만들 수 있습니다 (예 :'desired_reg = c ("Regression1", "Regression2")). – timfaber

관련 문제