Извлечь первый элемент списка из вложенных списков - PullRequest
0 голосов
/ 05 мая 2020

У меня есть следующий столбец в моей таблице данных (внутри больше списков, но я просто предоставляю его упрощенно)

n  col1
1  list(c("1", "2", "3", "5"), c("5", "6", "8", "8"))
2  list(c("9", "10", "11", "12"), c("13", "14", "15", "16"))

И я хочу извлечь первое значение из каждого из списков в строка. Итак, мне нужен результат

n  col2
1  c("1", "5")
2  c("9", "13")

Я рассмотрел множество примеров здесь и на inte rnet о вложенных списках, кажется, что это должно быть легко, но не похоже, что это работает достаточно как я и собираюсь. Я использую следующие варианты кода

   1. dt$col2 <-sapply(dt$col1 , "[[", 1)
  `2. dt$col2 <- lapply(dt$col1, function(l) l[[1]])`
  `3. dt$col2 <- rvest::pluck(dt$col1, 1)`

Но все они дают один и тот же результат, который в основном является первым списком

n  col2
1  c("1", "2", "3", "5")
2  c("9", "10", "11", "12")

Должно быть что-то не так с моим пониманием, но я могу Не понимаю, почему так происходит

1 Ответ

2 голосов
/ 05 мая 2020

Попробуйте:

dt$col2 <-sapply(dt$col1 , "[", 1)

(Элементы ваших списков не списки, а только векторы, поэтому можно использовать одну скобку)

EDIT:

Для столбца внутри таблицы данных:

 dt$col2 <- sapply(dt$col1,function(x){sapply(x,'[',1)})
...