сопоставить фрейм данных со списком фреймов и добавить новую переменную в список в R - PullRequest
1 голос
/ 28 марта 2012

У меня есть 2 отдельных кадра данных

df1

ID      Name     loq
1        a       1.2 
1        b       1.4
1        c       1.0
2        a       0.5
2        b       0.7
2        c       0.3
3        a       0.5
3        b       0.2
3        c       0.1        

df2 Это список фреймов данных

[1]  ID     Name   
     1       a 
     3       b
     2       c
     2       a

 [2]  ID     Name
      3      c
      2      b
      2      a
      1      c

Результат для df2 будет выглядеть следующим образом

  [1]  ID     Name   loq 
     1       a     1.2
     3       b     0.2
     2       c     0.3
     2       a     0.5

 [2]  ID     Name    loq
      3      c       0.1
      2      b       0.7
      2      a       0.5
      1      c       1.0

И у меня есть длинный список данных.

Я хотел бы добавить идентификатор совпадения И имя из df1 в список df2 и новую переменную с именем loq в список df2 на основе совпадения.

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

1 Ответ

3 голосов
/ 28 марта 2012

Придерживаясь базы, довольно просто делать то, что вы хотите:

# Create the data frames/lists
df1 <- data.frame(
  ID   = gl(3,3), 
  Name = rep(letters[1:3], 3), 
  loq  = c(1.2, 1.4, 1.0, 0.5, 0.7, 0.3, 0.5, 0.2, 0.1)
)
df2 <- list()
df2[[1]] <- data.frame(ID = factor(c(1, 3, 2, 2)), Name = c('a', 'b', 'c', 'a'))
df2[[2]] <- data.frame(ID = factor(c(3, 2, 2, 1)), Name = c('c', 'b', 'a', 'c'))

lapply(df2, merge, y = df1)  # merge df2 list elements accordingly to df1

Вы также можете вручную указать, что объединять. В этом случае он ищет совпадающие имена столбцов: c (ID, Name). Если вы хотите поместить df2 в фрейм данных, вы можете сделать что-то вроде

do.call("rbind.data.frame", df2)  # uses df2 list elements as arguments to rbind

Ключевым моментом здесь является то, что столбцы ID и Имя однозначно определяют запись (в терминах базы данных они должны быть составным первичным ключом для этой таблицы данных (фрейма)). Таким образом, объединение (объединение) элементов списка df2 (фреймов данных) по их совпадениям в df1 не приведет к дублированию и, следовательно, к проблемам. Это значит, что он будет работать до тех пор, пока не будет 2 разных строки с одинаковыми значениями ID и Name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...