我有一个看起来像这样的数据框(让我们称之为df1)......
Date Price Product Key
2014-08-06 10 00020e32-3ae8-b7fa-8ecd53a64715
2014-08-06 56 00020e32-3ae8-b7fa-8ecd53a64715
2014-09-15 81 000340b8-9ee5-b2cb-60fb50bacac8
2014-06-04 73 000340b8-9ee5-b2cb-60fb50bacac8
2015-01-19 44 000458f1-1297-a2fd-9304a2fdb6ae
2015-05-23 20 000458f1-1297-a2fd-9304a2fdb6ae
2014-07-21 0.75 ddc8f2e2-3496-8a71-8d1019d2651c
数据框中还有其他变量,但我们现在会忽略它们,因为我不需要它们。
数据集有许多不同的日期和产品密钥,这只是一个例子。我想要做的是完全匹配具有相同产品密钥的所有产品,然后将具有该产品密钥的所有产品提取到它自己的列中。 (这应该会给我100多个专栏,每列都有自己独特的产品密钥,但也保留各自的日期和价格(以及我未包含的其他变量),然后我可以使用)
正如您所看到的,新列中的每个产品密钥仍然对应于各自的日期/价格/其他变量。显然每列会有两个以上的产品密钥,但这只是一个例子。
我尝试了各种grep函数和dplyr函数,但我似乎没有得到任何结果?对我而言,主要问题是一列内的初始匹配流程,并且能够将产品密钥保存在相关日期和价格旁边。我希望这是有道理的 - 如果我能说得更清楚,请告诉我。
Date price_currentday json_productkey pk pk_val
2014-08-06 10 00020e32-3ae8-b7fa-8ecd53a64715 Product_Key_1 00020e32-3ae8-b7fa-8ecd53a64715
2014-08-06 56 00020e32-3ae8-b7fa-8ecd53a64715 Product_Key_1 00020e32-3ae8-b7fa-8ecd53a64715
2014-09-15 81 000340b8-9ee5-b2cb-60fb50bacac8 Product_Key_2 000340b8-9ee5-b2cb-60fb50bacac8
2014-06-04 73 000340b8-9ee5-b2cb-60fb50bacac8 Product_Key_2 000340b8-9ee5-b2cb-60fb50bacac8
2015-01-19 44 000458f1-1297-a2fd-9304a2fdb6ae Product_Key_3 000458f1-1297-a2fd-9304a2fdb6ae
2015-05-23 20 000458f1-1297-a2fd-9304a2fdb6ae Product_Key_3 000458f1-1297-a2fd-9304a2fdb6ae
2014-07-21 0.75 ddc8f2e2-3496-8a71-8d1019d2651c Product_Key_4 ddc8f2e2-3496-8a71-8d1019d2651c
答案 0 :(得分:1)
df1$pk = paste("Product_Key", as.numeric(factor(
df1$Product_Key, levels = unique(df1$Product_Key)
)), sep = "_")
df1$pk_val = df1$Product_Key
tidyr::spread(df1, key = pk, value = pk_val)
Date Price Product_Key Product_Key_1
# 1 2014-06-04 73.00 000340b8-9ee5-b2cb-60fb50bacac8 <NA>
# 2 2014-07-21 0.75 ddc8f2e2-3496-8a71-8d1019d2651c <NA>
# 3 2014-08-06 10.00 00020e32-3ae8-b7fa-8ecd53a64715 00020e32-3ae8-b7fa-8ecd53a64715
# 4 2014-08-06 56.00 00020e32-3ae8-b7fa-8ecd53a64715 00020e32-3ae8-b7fa-8ecd53a64715
# 5 2014-09-15 81.00 000340b8-9ee5-b2cb-60fb50bacac8 <NA>
# 6 2015-01-19 44.00 000458f1-1297-a2fd-9304a2fdb6ae <NA>
# 7 2015-05-23 20.00 000458f1-1297-a2fd-9304a2fdb6ae <NA>
# Product_Key_2 Product_Key_3 Product_Key_4
# 1 000340b8-9ee5-b2cb-60fb50bacac8 <NA> <NA>
# 2 <NA> <NA> ddc8f2e2-3496-8a71-8d1019d2651c
# 3 <NA> <NA> <NA>
# 4 <NA> <NA> <NA>
# 5 000340b8-9ee5-b2cb-60fb50bacac8 <NA> <NA>
# 6 <NA> 000458f1-1297-a2fd-9304a2fdb6ae <NA>
# 7 <NA> 000458f1-1297-a2fd-9304a2fdb6ae <NA>
它重新排序您的行,但如果您有可以轻松修复的东西,那么
使用此数据:
df1 = read.table(text = "Date Price Product_Key
2014-08-06 10 00020e32-3ae8-b7fa-8ecd53a64715
2014-08-06 56 00020e32-3ae8-b7fa-8ecd53a64715
2014-09-15 81 000340b8-9ee5-b2cb-60fb50bacac8
2014-06-04 73 000340b8-9ee5-b2cb-60fb50bacac8
2015-01-19 44 000458f1-1297-a2fd-9304a2fdb6ae
2015-05-23 20 000458f1-1297-a2fd-9304a2fdb6ae
2014-07-21 0.75 ddc8f2e2-3496-8a71-8d1019d2651c",
header = T)
还可以使用相对较旧的tidyr
版本0.6.3来处理新数据。
df2 = read.table(text = "Date price_currentday json_productkey pk pk_val
2014-08-06 10 00020e32-3ae8-b7fa-8ecd53a64715 Product_Key_1 00020e32-3ae8-b7fa-8ecd53a64715
2014-08-06 56 00020e32-3ae8-b7fa-8ecd53a64715 Product_Key_1 00020e32-3ae8-b7fa-8ecd53a64715
2014-09-15 81 000340b8-9ee5-b2cb-60fb50bacac8 Product_Key_2 000340b8-9ee5-b2cb-60fb50bacac8
2014-06-04 73 000340b8-9ee5-b2cb-60fb50bacac8 Product_Key_2 000340b8-9ee5-b2cb-60fb50bacac8
2015-01-19 44 000458f1-1297-a2fd-9304a2fdb6ae Product_Key_3 000458f1-1297-a2fd-9304a2fdb6ae
2015-05-23 20 000458f1-1297-a2fd-9304a2fdb6ae Product_Key_3 000458f1-1297-a2fd-9304a2fdb6ae
2014-07-21 0.75 ddc8f2e2-3496-8a71-8d1019d2651c Product_Key_4 ddc8f2e2-3496-8a71-8d1019d2651c",
header = T)
tidyr::spread(df2, key = pk, value = pk_val)
# Date price_currentday json_productkey Product_Key_1
# 1 2014-06-04 73.00 000340b8-9ee5-b2cb-60fb50bacac8 <NA>
# 2 2014-07-21 0.75 ddc8f2e2-3496-8a71-8d1019d2651c <NA>
# 3 2014-08-06 10.00 00020e32-3ae8-b7fa-8ecd53a64715 00020e32-3ae8-b7fa-8ecd53a64715
# 4 2014-08-06 56.00 00020e32-3ae8-b7fa-8ecd53a64715 00020e32-3ae8-b7fa-8ecd53a64715
# 5 2014-09-15 81.00 000340b8-9ee5-b2cb-60fb50bacac8 <NA>
# 6 2015-01-19 44.00 000458f1-1297-a2fd-9304a2fdb6ae <NA>
# 7 2015-05-23 20.00 000458f1-1297-a2fd-9304a2fdb6ae <NA>
# Product_Key_2 Product_Key_3 Product_Key_4
# 1 000340b8-9ee5-b2cb-60fb50bacac8 <NA> <NA>
# 2 <NA> <NA> ddc8f2e2-3496-8a71-8d1019d2651c
# 3 <NA> <NA> <NA>
# 4 <NA> <NA> <NA>
# 5 000340b8-9ee5-b2cb-60fb50bacac8 <NA> <NA>
# 6 <NA> 000458f1-1297-a2fd-9304a2fdb6ae <NA>
# 7 <NA> 000458f1-1297-a2fd-9304a2fdb6ae <NA>