Сопоставление списка фреймов данных со списком символов - PullRequest
0 голосов
/ 17 октября 2018

У меня есть список фреймов данных

df1=data.frame(yield=c(7,4,8),temp=c(25,28,30)) 
df2=data.frame(yield=c(6,5,8),temp=c(26,25,26))
df3=data.frame(yield=c(3,4,7),temp=c(31,28,27)) 

l1=list(df1,df2,df3)

и список символов

l2=list("high N","mid N","low N")

Я пытаюсь создать переменную с именем "trt" в каждом фрейме данных, заполняя егос каждым элементом списка символов.

На одном кадре данных это будет выглядеть так:

df1$trt=l2[[1]]

, но когда я пытаюсь сделать это, я не могу получить то, что яищу.

Я пытался:

l3=lapply(l1,function(x) x$trt=l2)

и

l3=lapply(l1,function(x,y) x$trt=l2[[y]])

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Или используйте transform

Map(transform, l1, trt = l2)
#[[1]]
#  yield temp    trt
#1     7   25 high N
#2     4   28 high N
#3     8   30 high N

#[[2]]
#  yield temp   trt
#1     6   26 mid N
#2     5   25 mid N
#3     8   26 mid N

#[[3]]
#  yield temp   trt
#1     3   31 low N
#2     4   28 low N
#3     7   27 low N

С tidyverse мы можем использовать mutate

library(tidyverse)
map2(l1, l2, ~ .x %>% 
                   mutate(trt = .y))
0 голосов
/ 17 октября 2018

Не совсем уверен, что вы ожидаете, но попробуйте Map

Map(`[<-`, l1, i = "trt", value = l2)
  yield temp    trt
1     7   25 high N
2     4   28 high N
3     8   30 high N

[[2]]
  yield temp   trt
1     6   26 mid N
2     5   25 mid N
3     8   26 mid N

[[3]]
  yield temp   trt
1     3   31 low N
2     4   28 low N
3     7   27 low N
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...