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 № 1Tomé 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))