2015-11-30 63 views
1

我有一個數據幀表示圖表的邊界列表,如下所示: | user1 | user2 | delta_t | |-------|-------|---------| | Bob | Alice | 10 | | Jake | June | -1 | 我想根據交互的時間創建一個有向圖,並且使用igraph,邊緣總是從user1到user2。
因此,我想通過我的數據框,並根據delta_t重新排列節點的順序。交換同一行中的列之間的元素

這就是我現在所擁有的:

network_edge_list <- transform(network_edge_list, user1 = ifelse(delta_t > 0, user2, user1), user2 = ifelse(delta_t > 0 , user1, user2)) 

它工作正常,但每次交換的用戶在一排的時候,它改變了用戶2名成數。我猜這是因爲它沒有辦法跟蹤第一次交換後user2的字符串值,所以它會進行任意替換。 雖然在數據框中一直髮生,並且一旦用戶轉換爲數字,該數字在整個數據框中正確使用,這非常令人討厭,並使我的下一步變得更加困難。

我也試過:

myfunction <- function(df){ 
    if (df[3] > 0){ 
    temp <- df[1] 
    df[1] <- df[2] 
    df[2] <- temp 
    } 
} 
df <- apply(df, 1, function(x) myfunction) ` 

但我沒有得到我所期待的結果,實際上是找了很多更復雜的比我希望的那樣。

任何人有任何想法? 謝謝

+2

是什麼類型的數據?也許他們只是因素? – Tim

+0

對!猜測在故障排除時打開你的眼睛會幫助Oo –

回答

1

您可能正在處理因素,並用因數中的數字替換名稱。您需要先在列上使用as.character

network_edge_list$user1 <- as.character(network_edge_list$user1) 
network_edge_list$user2 <- as.character(network_edge_list$user2) 

那麼你的代碼應該只是罰款

0
df1 <- read.table(text=" 
user1 user2 delta_t 
Bob Alice 10 
Jake June -1", head=T, as.is=T) 

df1 <- rbind(df1, df1) 
df1 
# user1 user2 delta_t 
# 1 Bob Alice  10 
# 2 Jake June  -1 
# 3 Bob Alice  10 
# 4 Jake June  -1 

df1[df1$delta_t>0, 1:2] <- df1[which(df1$delta_t>0), 2:1] 
df1 
# user1 user2 delta_t 
# 1 Alice Bob  10 
# 2 Jake June  -1 
# 3 Alice Bob  10 
# 4 Jake June  -1