2015-04-02 60 views
1

我有含有兩列例如爲:子集data.frame在R(用於設置頂點屬性)

name age 
a  10 
b  20 
c  30 

的data.frame信息和我的名字c b d的列表。現在我想按照列表的順序獲取原始數據框的屬性的data.frame(或列表或任何其他)。對於上面的例子,這將是

name age 
c  30 
b  20 
d  NA 

我覺得這應該不是太困難(甚至在網上可能),但我無法找到一個方法來做到這一點在R.

背景:

我有一個從邊緣列表創建的'網絡'對象。我有另一個頂點屬性,但沒有權力如何每個這些是最初排序。現在我想 分配網絡頂點這些屬性。

但爲了使用

  • network %v% "age" <- dataframe[,2]我需要的數據幀是按照正確的順序

  • set.vertex.attribute(network, "age", hhs$age, v = hhs$di)我需要頂點ids

回答

4

I拿着你的名字列表ls,並將其作爲data.framename的名字相同。由於它產生的

new_df<-left_join(df2,df,by="name") 

然後我用left_joindplyr

ls<-c("c","b","d") 
df2<-data.frame(name=ls) 

df2 %>% left_join(df,by="name")->new_df 

> new_df 
    name age 
1 c 30 
2 b 20 
3 d NA 

或者,如果你不熟悉的dplyr/magrittr管道,你可以爲重新寫這個同樣的結果:

> new_df 
    name age 
1 c 30 
2 b 20 
3 d NA 

其實自df2只有name,你甚至不需要指定by=參數。

new_df<-left_join(df2,df) 

產生相同的結果。

0

這可以在一個單一的線路來完成在基礎R與match功能:

data.frame(name=names, age=df$age[match(names, df$name)]) 
# name age 
# 1 c 30 
# 2 b 20 
# 3 d NA 

數據:

names <- c("c", "b", "d") 
df <- data.frame(name=c("a", "b", "c"), age=c(10, 20, 30))