vectores listas insertar filas eliminar data crear creacion contar concatenar columna r indexing plyr lapply

listas - ¿Cómo obtener el nombre de un data.frame dentro de una lista?



insertar columna en data frame r (3)

¿Cómo puedo obtener el nombre de un marco de datos de una lista? Claro, get() obtiene el objeto en sí, pero quiero tener su nombre para usar dentro de otra función. Aquí está el caso de uso, en caso de que prefiera sugerir un trabajo alternativo:

lapply(somelistOfDataframes, function(X) { ddply(X, .(idx, bynameofX), summarise, checkSum = sum(value)) })

Hay una columna en cada marco de datos que recibe el mismo nombre que el marco de datos dentro de la lista. ¿Cómo puedo obtener este nombre bynameofX ? names(X) devolverían el vector completo.

EDITAR: Aquí hay un ejemplo reproducible:

df1 <- data.frame(value = rnorm(100), cat = c(rep(1,50), rep(2,50)), idx = rep(letters[1:4],25)) df2 <- data.frame(value = rnorm(100,8), cat2 = c(rep(1,50), rep(2,50)), idx = rep(letters[1:4],25)) mylist <- list(cat = df1, cat2 = df2) lapply(mylist, head, 5)


Usaría los nombres de la lista de esta manera:

dat1 = data.frame() dat2 = data.frame() l = list(dat1 = dat1, dat2 = dat2) > str(l) List of 2 $ dat1:''data.frame'': 0 obs. of 0 variables $ dat2:''data.frame'': 0 obs. of 0 variables

y luego use lapply + ddply como:

lapply(names(l), function(x) { ddply(l[[x]], c("idx", x), summarise,checkSum = sum(value)) })

Esto no se ha probado sin una respuesta reproducible. Pero debería ayudarte en la dirección correcta.

EDITAR (ran2): Aquí está el código que usa el ejemplo reproducible.

l <- lapply(names(mylist), function(x) { ddply(mylist[[x]], c("idx", x), summarise,checkSum = sum(value)) }) names(l) <- names(mylist); l


Aquí está el equivalente dplyr

library(dplyr) catalog = data_frame( data = someListOfDataframes, cat = names(someListOfDataframes)) %>% rowwise %>% mutate( renamed = data %>% rename_(.dots = cat %>% as.name %>% list %>% setNames("cat")) %>% list) catalog$renamed %>% bind_rows(.id = "number") %>% group_by(number, idx, cat) %>% summarize(checkSum = sum(value))


en primer lugar, podría usar los nombres (lista) -> list_name y luego use list_name [1], list_name [2] etc. para obtener el nombre de cada lista. (También puede necesitar as.numeric (list_name [x]) si los nombres de su lista son números.