2015-04-02 61 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))