Как объединить имя строки по одному столбцу из другого data.frame? - PullRequest
2 голосов
/ 26 октября 2010

Интересно, есть ли лучший способ поместить два data.frames в один, обрабатывая имена строк, как если бы это был столбец, а затем объединить этот столбец с некоторым другим data.frame. Я знаю, что мог бы сделать следующее

 df1$rn <- row(df1) 
 all <- merge(df1,df2, by.x="rn", by.y="some_column")

Я имею в виду, что это создает избыточные данные (имена строк в виде столбцов), которые вообще не нужны. Так какой же умный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Вы можете использовать "row.names" или 0 в качестве индекса для имен строк.

Пример использования authors и books из merge help:

rownames(authors) <- authors$surname
merge(authors, books, by.x = "row.names", by.y = "name")
1 голос
/ 26 октября 2010

«Умнее» действительно зависит от ваших данных, которых у нас нет.но

df1 <- data.frame(
    X1 = 1:10,
    id = letters[1:10]
)

df2 <- data.frame(
    X2 = 10:1,
    X3 = letters[11:20]
)
rownames(df2) <- df1$id
df2 <- df2[sample.int(10),]

cbind(df1,df2[match(df1$id,rownames(df2)),])

Редактировать: ответ Витошки тот, который вы ищете.Если бы я потрудился посмотреть справочные файлы ?merge, я бы тоже это знал ...

Я оставляю здесь свое решение на тот случай, если кому-то понадобится быстрая альтернатива слиянию:

> system.time(replicate(1000,cbind(df1,df2[match(df1$id,rownames(df2)),])))
   user  system elapsed 
   0.57    0.00    0.57 
> system.time(replicate(1000,merge(df1,df2,by.x="id",by.y="row.names")))
   user  system elapsed 
   2.36    0.02    2.37 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...