在R中转换一个以列值作为列名的 Dataframe

cqoc49vn  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(103)

我有一个这样的数据框

date     price num_floors    house
1  2023-01-01  94.30076          3        A
2  2023-01-01  95.58771          2        B
3  2023-01-02 102.78559          1        C
4  2023-01-03  93.29053          3        D

我想改变它,使每一列包含给定日期所有房屋的价格和num_floor。对于一列,列的前两行是指第一个房子,接下来的两行是指第二个房子。没有数据的其余条目用缺失值NaN填充。
现在,我想转换上面的dataframe,使其具有与以下类似的结构:

2023-01-01    2023-01-02  2023-01-03
1   94.30076     102.78559    93.29053
2          3             1           3         
3   95.58771            NA          NA
4          2            NA          NA

每列包含给定日期所有房屋的价格和num_floor。对于一列,列的前两行是指第一个房子,接下来的两行是指第二个房子。没有数据的其余条目用缺失值NaN填充。
我尝试了pivot_wider。它不起作用:

# Pivot the dataframe
df_transformed <- df %>%
  pivot_wider(names_from = date,
              values_from = c(price, num_floors),
              values_fill = NaN)
gr8qqesn

gr8qqesn1#

您可以先透视到长格式,然后在添加行号后透视到宽格式。

pivot_wider(
  pivot_longer(df, -date) %>% mutate(n=row_number(), .by=date),
  id_cols = n, names_from=date, values_from = value
) %>% select(-n)

输出:

`2023-01-01` `2023-01-02` `2023-01-03`
         <dbl>        <dbl>        <dbl>
1         94.3         103.         93.3
2          3             1           3  
3         95.6          NA          NA  
4          2            NA          NA

(我会注意到,这种转换似乎不太可能是表示数据的最佳方式)。

相关问题