R 如何通过分组和筛选将行分散到列?

R 如何通过分组和筛选将行分散到列?,r,dplyr,R,Dplyr,我有一个类似这样的数据集: df_1 <- tribble( ~id, ~type, ~min_price, ~max_price, "1", "X", 10, 40, "1", "Y", 20, 50, "2", "X", 18, 40, "2", "Y", 34,

我有一个类似这样的数据集:

df_1 <- tribble(
  ~id,       ~type,     ~min_price,  ~max_price,
  "1",        "X",          10,          40,
  "1",        "Y",          20,          50,
  "2",        "X",          18,          40,
  "2",        "Y",          34,          50,
  "2",         NA,          15,          70,
  "3",        "X",          40,          90,
  "3",        "Y",          23,         100,
)

df_1我们可以使用
pivot_更宽
,它可以获取多个

tidyr::pivot_wider(df_1, names_from = type, values_from = c(min_price, max_price))

# A tibble: 3 x 7
#  id    min_price_X min_price_Y min_price_NA max_price_X max_price_Y max_price_NA
#  <chr>       <dbl>       <dbl>        <dbl>       <dbl>       <dbl>        <dbl>
#1 1              10          20           NA          40          50           NA
#2 2              18          34           15          40          50           70
#3 3              40          23           NA          90         100           NA
tidyr::pivot\u更宽(df\u 1,name\u from=type,value\u from=c(最小价格,最大价格))
#一个tibble:3x7
#id最小价格X最小价格Y最小价格N最大价格X最大价格Y最大价格N
#                                              
#111020NA 4050NA
#2 2              18          34           15          40          50           70
#3 3 40 23 NA 90 100 NA

我们可以更广泛地使用
pivot\u
,它可以获取多个

tidyr::pivot_wider(df_1, names_from = type, values_from = c(min_price, max_price))

# A tibble: 3 x 7
#  id    min_price_X min_price_Y min_price_NA max_price_X max_price_Y max_price_NA
#  <chr>       <dbl>       <dbl>        <dbl>       <dbl>       <dbl>        <dbl>
#1 1              10          20           NA          40          50           NA
#2 2              18          34           15          40          50           70
#3 3              40          23           NA          90         100           NA
tidyr::pivot\u更宽(df\u 1,name\u from=type,value\u from=c(最小价格,最大价格))
#一个tibble:3x7
#id最小价格X最小价格Y最小价格N最大价格X最大价格Y最大价格N
#                                              
#111020NA 4050NA
#2 2              18          34           15          40          50           70
#3 3 40 23 NA 90 100 NA
您可以尝试以下方法:

library("reshape2")
dcast(melt(df_1, id.vars = c("id", "type")), id ~ variable + type)
结果将是:

  id min_price_X min_price_Y min_price_NA max_price_X max_price_Y max_price_NA
1  1          10          20           NA          40          50           NA
2  2          18          34           15          40          50           70
3  3          40          23           NA          90         100           NA
您可以尝试以下方法:

library("reshape2")
dcast(melt(df_1, id.vars = c("id", "type")), id ~ variable + type)
结果将是:

  id min_price_X min_price_Y min_price_NA max_price_X max_price_Y max_price_NA
1  1          10          20           NA          40          50           NA
2  2          18          34           15          40          50           70
3  3          40          23           NA          90         100           NA