Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重塑2对数据帧的有条件应用_R_Reshape2 - Fatal编程技术网

R 重塑2对数据帧的有条件应用

R 重塑2对数据帧的有条件应用,r,reshape2,R,Reshape2,我有一个示例数据框,如下所示 V1 V2 TEST_1 TEST_1a AA TEST_2 TEST_2a BB TEST_3 TEST_4 TEST_4a CC TEST_4b DD Col1a Col1b Col2a Col2b Col3a Col3b Col4a Col4b TEST_1 TEST_2

我有一个示例数据框,如下所示

    V1        V2
   TEST_1     
   TEST_1a    AA 
   TEST_2     
   TEST_2a    BB 
   TEST_3     
   TEST_4     
   TEST_4a    CC
   TEST_4b    DD
Col1a    Col1b   Col2a    Col2b   Col3a   Col3b  Col4a   Col4b

TEST_1           TEST_2           TEST_3         TEST_4   
TEST_1a   AA     TEST_2a    BB                   TEST_4a  CC
                                                 TEST_4b  DD
我想根据V1列中的**值将此数据帧转换为如下内容

    V1        V2
   TEST_1     
   TEST_1a    AA 
   TEST_2     
   TEST_2a    BB 
   TEST_3     
   TEST_4     
   TEST_4a    CC
   TEST_4b    DD
Col1a    Col1b   Col2a    Col2b   Col3a   Col3b  Col4a   Col4b

TEST_1           TEST_2           TEST_3         TEST_4   
TEST_1a   AA     TEST_2a    BB                   TEST_4a  CC
                                                 TEST_4b  DD
等等


我已经研究过Reforme2函数,它们似乎都不适合我在这里的需要。非常感谢任何帮助

一个选项是
dcast
。根据显示的输出,我们可能需要单独进行整形

library(data.table)
library(gtools)
setDT(df1)
df1[, grp := paste0("Col", rleid(sub("[a-z]+$", "", V1)))
    ][, c("grp1", "grp2") := .(paste0(grp, "a"), paste0(grp, "b"))
     ][]
out <- cbind(dcast(df1, rowid(grp1) ~ grp1, value.var = "V1", fill = ""), 
     dcast(df1, rowid(grp2) ~ grp2, value.var = "V2", fill = ""))[, 
               c('grp1', 'grp2') := NULL][]
setcolorder(out,  mixedsort(names(out)))
out
#     Col1a Col1b   Col2a Col2b  Col3a Col3b   Col4a Col4b
#1:  TEST_1        TEST_2       TEST_3        TEST_4      
#2: TEST_1a    AA TEST_2a    BB              TEST_4a    CC
#3:                                          TEST_4b    DD
数据
df1@akrun感谢您的快速响应,akrun。非常感谢!我确实遇到了您指定的dcast选项,但是,我希望将数据作为块移动到新列中。当前解决方案在第一列中保留测试值,并且只将AA、BB移动到新列中。对此表示抱歉。我已编辑了原始问题。任何重定向到类似线程的帮助都会很有帮助。好的,我再次感谢你的努力!这正是我需要的。