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移动到新列中。对此表示抱歉。我已编辑了原始问题。任何重定向到类似线程的帮助都会很有帮助。好的,我再次感谢你的努力!这正是我需要的。