R中某些相关列的转置

时间:2018-10-13 13:14:50

标签: r dataframe reshape

我是R的新手。我正在尝试对数据帧进行转置而没有运气。尝试使用t(dataframe),melt(dataframe),但没有得到我想要的输出。

原始数据帧如下

CAT1   CAT2   VAL1   VAL2
A1     A2     BLUE   BLUE
B1     B2     GREEN  GREEN
C1     C2     BLUE   BLUE

我想以这种方式转置此数据帧,使其看起来像以下内容,并且VAL1和VAL2工作分组变量。

VAL    CAT

BLUE   A1    
       A2
BLUE   C1
       C2
GREEN  B1
       B2

我想知道这是否可以实现。

以下是创建第一个数据集的代码:

dt <-data.frame('CAT1' = c('A1','B1','C1'),
                'CAT2' = c('A2','B2','C2'),
                'VAL1' = c('BLUE','RED','GREEN'),
                'VAL2' = c('BLUE','RED','GREEN'), stringsAsFactors = FALSE)

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为x = 5 if x < 2: print ('Below 2') elif > 2 print ('Two or more') else: print ('Something Else') 会让您接近。

reshape

现在,您需要排除不需要的列,如dt_long <- reshape(dt, varying = list(c('CAT1','CAT2'), c('VAL1','VAL2')), sep = "", direction = "long") dt_long # time CAT1 VAL1 id #1.1 1 A1 BLUE 1 #2.1 1 B1 RED 2 #3.1 1 C1 GREEN 3 #1.2 2 A2 BLUE 1 #2.2 2 B2 BLACK 2 #3.2 2 C2 RED 3 中所示。

此外,如果列名称为la“ CAT1,CAT2,... CATn”,而不要输入n个名称,请执行dt_long[, c("CAT1", "VAL1")]


更新

根据新要求,我们可以将列paste0("CAT", 1:n)创建为

VAL

此外,我们可以生成向量dt_long$VAL <- c(rbind(unique(dt_long$VAL1), NA)) # CAT1 VAL1 VAL #1.1 A1 BLUE BLUE #1.2 A2 BLUE <NA> #2.1 B1 RED RED #2.2 B2 RED <NA> #3.1 C1 GREEN GREEN #3.2 C2 GREEN <NA>

c("VAL11, VAL12, VAL21, VAL22, VAL31, VAL32")

希望这会有所帮助。