Добавить новый элемент (тег) в список в R

#r

#r

Вопрос:

У меня есть набор данных, который генерируется с помощью GET метода (вызова API).

 dataset<-GET('www.ttttyyyyzzzz.com')
contents <- content(dataset)
  

Я извлекаю данные с помощью следующей команды
contents<-contents$response$data . Это создаст список. Список списка списка.

Вот как список выглядит в RStudio. введите описание изображения здесь

С точки зрения рассмотрения этого как фрейма данных, у меня есть 8 строк и 42 столбца. Что я действительно хочу сделать, так это создать 43-й столбец под названием «Год» и добавить его к каждому из 8 высокоуровневых элементов. Таким образом, список теперь будет «Списком 43» для всех 8 моих элементов.

@Ronak запросил dput — я создал макет ради этого упражнения. С помощью следующей команды я хочу добавить 4-й элемент в мой основной список под названием ‘p’ с общим значением 25 во всех списках.

 structure(list(m = 1, n = 2, o = 3, structure(list(m = 3, n = 4, 
    o = 5), .Names = c("m", "n", "o")), structure(list(m = 6, 
    n = 9, o = 8), .Names = c("m", "n", "o"))), .Names = c("m", 
"n", "o", "", ""))
  

Комментарии:

1. Где в вашем наборе данных отображается год?

2. Это не так. Это то, что я хочу добавить. Я хочу сделать это списком из 43.

3. structure(list(m = 1, n = 2, o = 3, structure(list(m = 3, n = 4, o = 5), .Names = c("m", "n", "o")), structure(list(m = 6, n = 9, o = 8), .Names = c("m", "n", "o"))), .Names = c("m", "n", "o", "", "")) Вот так. Я хочу добавить 4-й элемент с именем p, например, со значением 25 для всех списков

4. К сожалению, нет. Это создало вложенный список внутри всех списков.

5. Работает! Легенда! Намасте!

Ответ №1:

Если я правильно понял цель, мы можем использовать:

  plyr::llply(contents,function(x) rlist::list.append(x,p=25))
  

Комментарии:

1. Это ИДЕАЛЬНО! Но как я могу сделать это именованным атрибутом. Я хочу назвать это «Year». Когда вы говорите ‘p = 25’, он не назвал элемент как p

2. @CuriousBeing не уверен, но давайте посмотрим. Хотя замена p на Year у меня работает, хотя и не является атрибутом.

3.Это то, что вам нужно? plyr::llply(res,function(x){ attr(x,"Year")<-x["Year"] x}) res является результатом выше и p был переименован в Year .

Ответ №2:

Итак, мы можем добавить именованный элемент списка, выполнив

 lapply(lst, function(x) c(x, p = 25))


#$m
#    p 
# 1 25 

#$n
#    p 
# 2 25 

#$o
#    p 
# 3 25 

#[[4]]
#[[4]]$m
#[1] 3

#[[4]]$n
#[1] 4

#[[4]]$o
#[1] 5

#[[4]]$p
#[1] 25
#...
#...
  

Или с помощью purrr::map

 purrr::map(lst, ~ c(., p = 25))
  

данные

 lst <- structure(list(m = 1, n = 2, o = 3, structure(list(m = 3, n = 4, o = 
5), .Names = c("m", "n", "o")), structure(list(m = 6, n = 9, o = 8), .Names = 
c("m", "n", "o"))), .Names = c("m", "n", "o", "", ""))
  

Ответ №3:

Вот вариант с base R

 Map(c, lst1, p = 25)
#$m
#    p 
# 1 25 

#$n
#    p 
# 2 25 

#$o
#    p 
# 3 25 

#[[4]]
#[[4]]$m
#[1] 3

#[[4]]$n
#[1] 4

#[[4]]$o
#[1] 5

#[[4]]$p
#[1] 25

#...
  

данные

 lst1 <-  structure(list(m = 1, n = 2, o = 3, structure(list(m = 3, n = 4, o = 
 5), .Names = c("m", "n", "o")), structure(list(m = 6, n = 9, o = 8), .Names = 
  c("m", "n", "o"))), .Names = c("m", "n", "o", "", ""))