在R中以特定顺序子集化data.frame(用于设置顶点属性)

时间:2015-04-02 12:16:19

标签: r networking dataframe subset sna

我在包含两列的data.frame中有信息,例如:

name  age
a     10
b     20
c     30

我有一个名字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)我需要顶点ID

2 个答案:

答案 0 :(得分:4)

我将您的名称列表ls设为data.frame,并使用相同的name名称。

然后我使用left_join

中的dplyr
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<-left_join(df2,df,by="name")

因为它产生相同的结果:

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

事实上,由于df2只有name,因此您甚至不需要指定by=参数。

new_df<-left_join(df2,df)

产生相同的结果。

答案 1 :(得分:0)

这可以使用match函数在基数R中的单行中完成:

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))