1

我在包含两列的 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
4

2 回答 2

4

我拿了你的名单,ls并把它做成data.frame了同名的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<-left_join(df2,df,by="name")

因为它产生相同的结果:

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

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

new_df<-left_join(df2,df)

产生相同的结果。

于 2015-04-02T12:40:32.297 回答
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))
于 2015-06-14T03:21:59.590 回答