将两列值折叠到一个新列中
Collapse Two Column Values into a New Column
我有如下数据集:
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
您可以使用 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
一步到位:
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
。
我有如下数据集:
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
您可以使用 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
一步到位:
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
。