首页 > 解决方案 > 将特定的观察和行变成 R 中的列

问题描述

我有类似于以下示例的行和列的数据,并且希望基本上将每隔一行转换为一列。但是,我还想提取每个特定的观察结果并将该结果放入相应的列中。所以我会采取:

       X1 x y xx xy           yy  
ci.lo1  0 0 0  0  0 -19350.63073
ci.up1  0 0 0  0  0    104.23538
ci.lo2  0 0 0  0  0  -8740.25544
ci.up2  0 0 0  0  0     52.97149 

并试图把它变成:

      X1.lo  X1.up x.lo x.up y.lo y.up xx.lo xx.up xy.lo xy.up        yy.lo     yy.up  
1   0            0    0    0    0    0     0     0     0     0 -19350.63073 104.23538
2   0            0    0    0    0    0     0     0     0     0  -8740.25544  52.97149

我想知道是否可以在 中进行这种类型的转换tidy,如果不是的话base R

提前致谢。

标签: rdataframetidy

解决方案


data %>% 
    rownames_to_column() %>% 
    mutate(rowname2=sub("^ci\\.(.*)\\d$","\\1",rowname), 
           rowname =sub("[^0-9]+","", rowname)) %>% 
    pivot_wider(names_from = rowname2, 
                values_from = -c(rowname2, rowname), 
                id_cols = rowname,
                names_sep = ".") %>%
    column_to_rownames()
  X1.lo X1.up x.lo x.up y.lo y.up xx.lo xx.up xy.lo xy.up      yy.lo     yy.up
1     0     0    0    0    0    0     0     0     0     0 -19350.631 104.23538
2     0     0    0    0    0    0     0     0     0     0  -8740.255  52.97149

推荐阅读