我在包含两列的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 答案 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))