r создать столбец, содержащий имена объектов внутри функции lapply

Я хотел бы создать столбец, который содержит имена объектов внутри функции lapply, в качестве прокси я называю это name.of.x.as.strig.function(), к сожалению, я не уверен, как это сделать, может быть, комбинация присвоения, do.call и вставки. Но пока использование этой функции только привело к более глубоким проблемам, я вполне уверен, что есть более R-подобное решение.

# generates a list of dataframes, 
data <- list(data.frame(c(1,2),c(3,3)),data.frame(c(1,2),c(3,3)),data.frame(c(1,2),c(3,3)),data.frame(c(1,2),c(3,3)))

# assigns names to dataframe
names(data) <- list("one","two", "tree", "four")

# subsets the second column into the object data.anova
data.anova <- lapply(data, function(x){x <- x[[2]];                                        
                                       return(matrix(x))})

Это должно позволить мне создать столбец внутри фрейма данных, содержащий его имя, для всех матриц в списке

data.anova <- lapply(data, function(x){    
    x$id <- name.of.x.as.strig.function(x)
    return(x)})

Я хотел бы получить:

3 one
3 one

3 two
3 two

...

Любой вклад высоко ценится.

История поиска: функция для извлечения имени объекта в виде строки, R - для получения имени объекта внутри lapply...

2 ответа

Решение

Может быть, вы просто ищете stack?

stack(lapply(data, `[[`, 2))
#   values  ind
# 1      3  one
# 2      3  one
# 3      3  two
# 4      3  two
# 5      3 tree
# 6      3 tree
# 7      3 four
# 8      3 four

(Или, используя ваш оригинальный подход: stack(lapply(data, function(x) {x <- x[[2]]; x})))

Если это так, melt от "reshape2" также будет работать.

Перебрать индексы data.anovaи используйте его для извлечения данных и имен:

data.anova <- lapply(seq_along(data.anova), function(i){    
  x <- as.data.frame(data.anova[[i]])
  x$id <- names(data.anova)[i]
  return(x)})  

Это производит:

# [[1]]
#   V1  id
# 1  3 one
# 2  3 one

# [[2]]
#   V1  id
# 1  3 two
# 2  3 two

# [[3]]
#   V1   id
# 1  3 tree
# 2  3 tree

# [[4]]
#   V1   id
# 1  3 four
# 2  3 four
Другие вопросы по тегам