/ / Subconjunto de data.frame en un orden específico en R (para establecer atributos de vértice) - r, networking, dataframe, subset, sna

Subconjunto de data.frame en un orden específico en R (para configurar atributos de vértice): r, networking, dataframe, subconjunto, sna

Tengo información en un data.frame que contiene dos columnas, por ejemplo:

name  age
a     10
b     20
c     30

y tengo una lista de nombres c b d. Ahora quiero obtener un data.frame (o una lista o cualquier cosa) de los atributos del marco de datos original en el orden de la lista. Para el ejemplo anterior, eso sería

name  age
c     30
b     20
d     NA

Siento que esto no debería ser demasiado difícil (incluso en línea tal vez) pero no puedo encontrar una manera de hacerlo en R.

Fondo:

Tengo un objeto de "red" creado desde un bordelista. Tengo otro de los atributos de vértice, pero no tengo poder sobre cómo se ordena cada uno de estos inicialmente. Ahora quiero Asigne a los vértices de la red estos atributos.

Pero para usar

  • network %v% "age" <- dataframe[,2] Necesitaría que el marco de datos esté en el orden correcto

y para

  • set.vertex.attribute(network, "age", hhs$age, v = hhs$di) Necesitaría los identificadores de vértice

Respuestas

4 para la respuesta № 1

Tomé tu lista de nombres ls y lo hizo un data.frame con el mismo name nombre.

Entonces utilicé left_join de 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

O, si no está familiarizado con la tubería dplyr / magrittr, puede volver a escribir esto como:

new_df<-left_join(df2,df,by="name")

Como produce el mismo resultado:

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

De hecho, desde df2 solo tiene name, ni siquiera necesita especificar el by= argumento.

new_df<-left_join(df2,df)

Da el mismo resultado.


0 para la respuesta № 2

Esto se puede hacer en una sola línea en la base R con el match función:

data.frame(name=names, age=df$age[match(names, df$name)])
#   name age
# 1    c  30
# 2    b  20
# 3    d  NA

Datos:

names <- c("c", "b", "d")
df <- data.frame(name=c("a", "b", "c"), age=c(10, 20, 30))