Folks,R программирование: Объединение двух кадров данных
Я хотел бы объединить или объединить, если будет 2 кадра данных DF1 и df2. Моя цель так же проста, как создание нового фрейма данных, столбцы которого объединены с df1 и df2.
Пример
product=c("p1","p1","p1","p1","p1","p1","p1","p1","p2","p2","p2","p2","p2","p2","p2","p2","p3","p3","p3","p3","p3","p3","p3","p3","p4","p4","p4","p4","p4","p4","p4","p4")
skew=c("b","b","b","b","a","a","a","a","b","b","b","b","a","a","a","a","b","b","b","b","a","a","a","a","b","b","b","b","a","a","a","a")
version=c(0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.2)
color=c("C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2","C1","C2")
price=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32)
df1 = data.frame(product, skew, version)
df2 = data.frame(product, skew, color, price)
Мое желание, чтобы получить результаты, как показано ниже.
Я попробовал несколько вариантов:
#option 1 with cbind
df <- cbind(df1,df2)
Это возвращает dataframe дублируется столбцы «продукта» и «перекос».
# Option 2, use data.frame
df <- data.frame(df1,df2)
Это дало мне довольно много, что я хочу, за исключением того, что он имел дополнительные колонки для «продукта» и «перекос». Они имеют суффикс «.1», поэтому нет дубликата.
# option 3, use merge which seems to be the way to go
df <- merge(df1,df2)
Я думаю, что я что-то с слияния не хватает, потому что это на самом деле создал союз из всех набора данных, что в общей сложности 128 наблюдений из 32 при условии. Наверное, так работает слияние. Я запустил «? Merge» и попробовал несколько вариантов, но не мог заставить его плюнуть, что я хочу.
Так что мой вопрос:
Каков наилучший способ получить нужный мне dataframe из df1 и df2, как указано выше?
Thx заранее за вашу помощь! Riad.
product skew version color price
1 p1 b 0.1 C1 1
2 p1 b 0.1 C2 2
3 p1 b 0.2 C1 3
4 p1 b 0.2 C2 4
5 p1 a 0.1 C1 5
6 p1 a 0.1 C2 6
7 p1 a 0.2 C1 7
8 p1 a 0.2 C2 8
9 p2 b 0.1 C1 9
10 p2 b 0.1 C2 10
11 p2 b 0.2 C1 11
12 p2 b 0.2 C2 12
13 p2 a 0.1 C1 13
14 p2 a 0.1 C2 14
15 p2 a 0.2 C1 15
16 p2 a 0.2 C2 16
17 p3 b 0.1 C1 17
18 p3 b 0.1 C2 18
19 p3 b 0.2 C1 19
20 p3 b 0.2 C2 20
21 p3 a 0.1 C1 21
22 p3 a 0.1 C2 22
23 p3 a 0.2 C1 23
24 p3 a 0.2 C2 24
25 p4 b 0.1 C1 25
26 p4 b 0.1 C2 26
27 p4 b 0.2 C1 27
28 p4 b 0.2 C2 28
29 p4 a 0.1 C1 29
30 p4 a 0.1 C2 30
31 p4 a 0.2 C1 31
32 p4 a 0.2 C2 32
Thx so much. Я пошел на второй вариант, так как я действительно не знаю, сколько строк у меня есть, 32 был просто примером, но может отличаться. Кроме того, в cbind я предпочел бы использовать имя. Поэтому, основываясь на ваших комментариях, я запустил: 'cbind (df1, df2 [, c (« цена »,« цвет »)])' и он выполнил эту работу! Thx снова для вашего быстрого ответа – Riad