在 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' 对象。我有另一个顶点属性,但无法控制每个顶点属性最初是如何排序的。现在我要
为网络顶点分配这些属性。
但是为了使用
network %v% "age" <- dataframe[,2]
我需要数据框的顺序正确
和
set.vertex.attribute(network, "age", hhs$age, v = hhs$di)
我需要顶点 ID
我拿了你的名字列表 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))
我在包含两列的 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' 对象。我有另一个顶点属性,但无法控制每个顶点属性最初是如何排序的。现在我要 为网络顶点分配这些属性。
但是为了使用
network %v% "age" <- dataframe[,2]
我需要数据框的顺序正确
和
set.vertex.attribute(network, "age", hhs$age, v = hhs$di)
我需要顶点 ID
我拿了你的名字列表 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))