2017-01-28 7 views
0

저는 R에 익숙하지 않고 R에서 다른 것들을 실험하고 싶습니다. 데이터 프레임을 만들었으며 for 루프를 사용하여 선택하려고합니다. 부의 값의 수 이 번호를 데이터 프레임의 새 열에 추가하고 싶습니다. 이 작업을 수행하는 더 쉬운 방법이 있다는 것을 알고 있지만 R에서 루프가 끊이지 않도록하고 싶습니다. 누구든지 나에게 조언이 있습니까? 아래에 데이터 프레임을 게시합니다.for 루프를 사용하여 음수를 계산하고 새 열에 추가

NEWFRAME < - data.frame (V1 = runif (500 분 = -2, 최대 = 2), V2 = runif (500 분 = -2, 최대 = 2))

입어 전진!

답변

0

먼저 얻을 데이터 집합의 행과 열 수 :

response = 0; 
for(ir in 1:nr) { // cycle through rows 

    for(ic in 1:nc) { // cycle through columns 
     response = response + ifelse(newframe[ir, ic]<0, 1, 0); 
    } 

} 

response 변수는 데이터 집합의 음의 값의 수를 포함 : 행과 colums 통해

nr = NROW(newframe); # you can use the lowercase variant as well or the dim command 
nc = NCOL(newframe); 

다음주기 .

사이클이를위한 각 문장처럼 작동

, 외부가 루프를 고려 할 수 있습니다 : ir 명령 1:nr에 의해 생성 된 시리즈의 모든 값 (즉 ..., nr21입니다) 소요됩니다 .

response = 0; 
for(v in unlist(newframe)) { # you need to un-list the dataframe otherwise you would cycle through the columns... 
    response = response + ifelse(v<0, 1, 0); 
} 

:

또 다른 예는

x = c("a", "b", "c"); 
for(v in x) { 
    cat(v, "\n"); 
} 

당신이 당신을 위해 루프 하나를 사용하여 동일한 결과를 achive 수 있음을 의미 출력

> a 
b 
c 

를 얻을 수 있습니다입니다 원하는 경우 for 루프에서 while 루프로 전환 할 수 있습니다.

response = 0; 
ir = 1; 
while(ir<=nr) { // cycle through rows 

    ic = 1; 
    while(ic<=nc) { // cycle through columns 
     response = response + ifelse(newframe[ir, ic]<0, 1, 0); 
     ic = ic + 1; 
    } 
    ir = ir + 1; 

} 

나는 :)

1

예, 명확하게이 작업을 수행하는 쉬운 방법이 있습니다 나는 당신의 질문에 대답 한 희망,하지만 난 당신에게 루프에 대한 몇 가지 조언을 줄 것이다. 먼저, 추가 열 만들 수 있습니다 :

for (i in 1:length(newframe[,1])) { 

} 

코멘트 :

nf=data.frame(newframe,neg=rep(NA)) #I called the column "neg" 

둘째, 당신은 루프가 시작 및 종료 할 범위를 정의 할 필요가 나는 길이를 썼다 (NEWFRAME를 [1]) 대신 500자를 직접 입력하십시오. 사용하는 개체와 연결된 무언가를 나타내는 것이 항상 좋습니다. 예를 들어, data.frame에 더 많은 행을 추가하면 처리되고 루프가 계속 작동합니다.

루프 내부에서 음수 만 원할 경우 IF 조건을 사용하여이를 가져와야합니다 : (여기서는 데이터 프레임의 첫 번째 열에서 작업하지만 "for "모든 열에서 작동하도록 루프)

if(newframe[i,1]<=0){ 
    nf$neg[i]=newframe[i,1] 
    } 

그런 다음 첫 번째 열에 대한 해결책이 있습니다! 나는 두 번째 칼럼 만 혼자하게했다. :)