将两列值折叠为新列

时间:2015-12-01 22:08:01

标签: r collapse

我有一个如下数据集:

dat1 <- read.table(header=TRUE, text="
          ID  Pa  Gu  Ta
          8645    Rel345  Gel294  Tel452
          6228    Rel345  Gel294  Tel467
          5830    Rel345  Gel294  Tel467
          1844    Rel345  Gel295  Tel467
          4461    Rel345  Gel295  Tel467
          2119    Rel345  Gel294  Tel452
          ")
dat1
    ID     Pa     Gu     Ta
1 8645 Rel345 Gel294 Tel452
2 6228 Rel345 Gel294 Tel467
3 5830 Rel345 Gel294 Tel467
4 1844 Rel345 Gel295 Tel467
5 4461 Rel345 Gel295 Tel467
6 2119 Rel345 Gel294 Tel452

我想要一个基于固定文本Number_00的新列和行数。例如:新ID ID3的第一个值为Number_001,然后是Number_002,依此类推。我做了以下事情。我需要帮助才能获得ID3

dat1$ID1 <- c(1:nrow(dat1))
dat1
    ID     Pa     Gu     Ta ID1
1 8645 Rel345 Gel294 Tel452   1
2 6228 Rel345 Gel294 Tel467   2
3 5830 Rel345 Gel294 Tel467   3
4 1844 Rel345 Gel295 Tel467   4
5 4461 Rel345 Gel295 Tel467   5
6 2119 Rel345 Gel294 Tel452   6

dat1$ID2 <- "Number_00"
dat1
    ID     Pa     Gu     Ta ID1    ID2
1 8645 Rel345 Gel294 Tel452   1 Number_00
2 6228 Rel345 Gel294 Tel467   2 Number_00
3 5830 Rel345 Gel294 Tel467   3 Number_00
4 1844 Rel345 Gel295 Tel467   4 Number_00
5 4461 Rel345 Gel295 Tel467   5 Number_00
6 2119 Rel345 Gel294 Tel452   6 Number_00

2 个答案:

答案 0 :(得分:2)

您可以使用do.call在数据的每一行调用paste0

dat1$ID3 <- do.call(paste0, dat1[c("ID2", "ID1")])
dat1
#    ID     Pa     Gu     Ta ID1       ID2        ID3
#1 8645 Rel345 Gel294 Tel452   1 Number_00 Number_001
#2 6228 Rel345 Gel294 Tel467   2 Number_00 Number_002
#3 5830 Rel345 Gel294 Tel467   3 Number_00 Number_003
#4 1844 Rel345 Gel295 Tel467   4 Number_00 Number_004
#5 4461 Rel345 Gel295 Tel467   5 Number_00 Number_005
#6 2119 Rel345 Gel294 Tel452   6 Number_00 Number_006

答案 1 :(得分:2)

您可以一步完成所有事情:

dat1$ID3 <- paste0("Number_00",1:nrow(dat1))
但是,当你达到两位数时,你可能不会想要两个前导零。如果是这种情况你可以这样做(注意我通过复制你的例子中的最后四行增加到十行):

dat1$ID3 <- paste0("Number_",sprintf("%03d",1:nrow(dat1)))
#     ID     Pa     Gu     Ta        ID3
#1  8645 Rel345 Gel294 Tel452 Number_001
#2  6228 Rel345 Gel294 Tel467 Number_002
#3  5830 Rel345 Gel294 Tel467 Number_003
#4  1844 Rel345 Gel295 Tel467 Number_004
#5  4461 Rel345 Gel295 Tel467 Number_005
#6  2119 Rel345 Gel294 Tel452 Number_006
#7  5830 Rel345 Gel294 Tel467 Number_007
#8  1844 Rel345 Gel295 Tel467 Number_008
#9  4461 Rel345 Gel295 Tel467 Number_009
#10 2119 Rel345 Gel294 Tel452 Number_010

使用第一种方法,最后一次ID3将为Number_0010