Язык r: как создать новый столбец в фрейме данных на основе другого фрейма данных?

Новичок, использующий R, хотел бы знать, как создать новый столбец в фрейме данных на основе данных из другого фрейма данных. Предположим, у меня есть 2 фрейма данных, связанных буквами "a", "b" и "c" в df1col2 а также df2col1 следующее:

> col1<-c(1, 2, 3, 4)
> col2<-c("a","b","c","c")
> df1<-data.frame(col1, col2)
> df1
  col1 col2
1    1    a
2    2    b
3    3    c
4    4    c
> c1<-c("a","b","c")
> c2<-c("Jim","Sue","Bob")
> c3<-c("abc","def","ghi")
> df2<-data.frame(c1,c2,c3)
> df2
  c1  c2 c3
1  a Jim abc
2  b Sue def
3  c Bob ghi

Я хочу добавить column3 к df1 добавить имена пользователей на основе значений "a", "b" или "c" в df1, То есть как я могу получить следующее с помощью R?

> df1
  col1 col2 col3
1    1    a Jim
2    2    b Sue
3    3    c Bob
4    4    c Bob

я пробовал df1["col3"]<-df2[df1$col2==df2$c1]$c2 но это не работает

Примечание: я хочу добавить только один столбец из df2 в df как показано выше (например, не все столбцы в df2).

2 ответа

Решение

Вам нужно объединить ().

# this merges the two data frames and rebinds the result to df1 
df1 <- merge(df1, df2, by.x = "col2", by.y = "c1")
# This renames the "c1" column to "col3"
names(df1) <- c("col2", "col1", "col3")
# This rearranges the columns in the right order
df1 <- df1[,c(2,1,3)] 

Результат:

 col1 col2 col3
1    1    a  Jim
2    2    b  Sue
3    3    c  Bob
4    4    c  Bob

Тип? Слияние, чтобы увидеть, как это работает.

> merge(df1, df2, by.x = "col2", by.y = "c1")
  col2 col1  c2
1    a    1 Jim
2    b    2 Sue
3    c    3 Bob
4    c    4 Bob
Другие вопросы по тегам