2017-10-10 62 views
-1

是否可以將一列中的一個單元格的數據從時間戳記中的一個時間戳記移動到另一個時間戳記而不丟失任何其他數據?我嘗試過移位和滑動功能,但它用NA值替換數據。 我嘗試過使用mutate函數,但它改變了完整的列。是否有任何函數或方法來執行操作?將單元格值從一個時間戳移到另一個R中

E.g,轉換:

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

兩個交換你需要持有一個在臨時變量兩個值。我們可以寫一個簡單的函數:

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

上的數據,就應該像這樣工作,得到期望的結果:與dplyr

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

在循環中實現交換功能時出現以下錯誤。 其中.min(allData [i]): (list)對象無法被強制鍵入'double'的錯誤 調用自:swap(allData [i],which.min(alldata [i]),which。 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)))) 

結果:

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

相關問題