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

Subsetting data.frame in in specific order in R (for setting vertex attributes)

我在包含两列的 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' 对象。我有另一个顶点属性,但无法控制每个顶点属性最初是如何排序的。现在我要 为网络顶点分配这些属性。

但是为了使用

我拿了你的名字列表 ls 并把它变成了 data.frame 和相同的 name 名字。

然后我使用了 dplyr

中的 left_join
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)

产生相同的结果。

这可以在 base 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))