2017-10-10 7 views
-1

한 데이터 열에서 한 셀의 데이터를 한 타임 스탬프에서 다른 데이터를 잃지 않고 시계열 데이터로 다른 셀로 이동할 수 있습니까? 나는 시프트 및 슬라이드 기능을 시도했지만 NA 값으로 데이터를 대체합니다. 나는 돌연변이 기능을 사용하려고했지만 전체 column.Is 변경 기능 또는 조작을 수행하는 방법?시프트 셀 값이 하나의 타임 스탬프에서 다른 셀로 이동 R

Date_Time | x | y  
01-01-2016 | 1 | 2  
02-01-2016 | 3 | 4 
03-01-2016 | 5 | 6 
04-01-2016 | 2 | 5 

에 :

예컨대는, 변환

Date_Time | x | y 
01-01-2016 | 5 | 2 
02-01-2016 | 3 | 4 
03-01-2016 | 1 | 6 
04-01-2016 | 2 | 5 

또는 데이터를 임시 변수에 하나를 보유 할 필요가 수직

Date_Time | x | y 
01-01-2016 | 2 | 2 
02-01-2016 | 1 | 4 
03-01-2016 | 3 | 6 
04-01-2016 | 5 | 5 
+0

부과하려는 규칙을 이해할 수 없습니다. 당신이 움직이고있는 가치와 그들이 가고있는 곳을 어떻게 결정하고 있습니까? 또한 작동하지 않는 코드를 보는 것이 도움이 될 것입니다. –

+0

최소 값을 갖는 타임 스탬프로 최대 값을 갖는 타임 스탬프의 셀을 바꾸려고합니다. –

답변

0

두 스왑 두 개의 값을 밀어 넣습니다. dplyr

your_data$x = swap(your_data$x, which.min(your_data$x), which.max(your_data$x)) 
+0

루프에서 스왑 함수를 구현하는 중에 다음 오류가 발생합니다. which.min (allData [i])의 오류 : (목록) 객체를 'double'을 입력하도록 강제 적용 할 수 없습니다. swap (allData [i], which.min (alldata [i]). max (allData [i])) –

+0

루프 코드를 보지 않고 어떤 일이 벌어지고 있는지 알 수 없습니다. 행이나 열을 반복하고 있습니까? 스왑은 스왑에서 벡터화되므로 행을 반복 할 필요가 없습니다. 만약 당신이 열을 반복한다면,'allData [[i]]'또는'allData [, i]'를 사용하여 벡터를 사용하면,'allData [i]'는 목록/데이터 프레임이다. – Gregor

0

다른 두 옵션 :

library(dplyr) 

df %>% 
    mutate(x = case_when(
    x == max(x) ~ min(x), 
    x == min(x) ~ max(x), 
    TRUE ~ x 
)) 

df %>% 
    mutate(x = replace(x, c(which.max(x), which.min(x)), c(min(x), max(x)))) 

이 원하는 결과를 제공하기 위해 다음과 같이 작동합니다, 데이터에

swap = function(x, i, j) { 
    stopifnot(length(i) == length(j)) 
    temp = x[i] 
    x[i] = x[j] 
    x[j] = temp 
    return(x) 
} 

: 우리는 간단한 기능을 쓸 수 있습니다 결과 :

Date_Time x y 
1 01-01-2016 5 2 
2 02-01-2016 3 4 
3 03-01-2016 1 6 
4 04-01-2016 2 5 
,

시프 x 세로 :

df %>% 
    mutate(x = c(x[-1], x[1])) 

또는

df %>% 
    mutate(x = c(x[length(x)], x[-length(x)])) 

결과 :

> df %>% 
+ mutate(x = c(x[-1], x[1])) 
    Date_Time x y 
1 01-01-2016 3 2 
2 02-01-2016 5 4 
3 03-01-2016 2 6 
4 04-01-2016 1 5 

> df %>% 
+ mutate(x = c(x[length(x)], x[-length(x)])) 
    Date_Time x y 
1 01-01-2016 2 2 
2 02-01-2016 1 4 
3 03-01-2016 3 6 
4 04-01-2016 5 5 

데이터 :

df = read.table(text = "Date_Time | x | y  
01-01-2016 | 1 | 2  
02-01-2016 | 3 | 4 
03-01-2016 | 5 | 6 
04-01-2016 | 2 | 5", header = TRUE, sep = "|") 
+0

'for'루프를 사용하여 케이스에 mutate 함수를 수행하려고합니다. 하지만 원하는 결과를 얻지 못하고 있습니다. 실제로 변경 사항은 없습니다. 루프가 작동하려면 다른 것을해야합니까? –

+0

@neekitanarayan 귀하의 질문에 명확하지 않다, for 루프를 적용 할 대상은 무엇입니까? 원하는 결과는 무엇입니까?내 솔루션이 원하는 출력과 일치하므로 추가 사양이있는 경우 질문 본문을 편집하여 새 정보를 통합하십시오. – useR