Язык r: как создать новый столбец в фрейме данных на основе другого фрейма данных?
Новичок, использующий R, хотел бы знать, как создать новый столбец в фрейме данных на основе данных из другого фрейма данных. Предположим, у меня есть 2 фрейма данных, связанных буквами "a", "b" и "c" в df1
col2
а также df2
col1
следующее:
> 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