Reputation: 3391
I have a dataset like the following:
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
I want a new column based on a fixed text Number_00
and number of the rows. For example: first value of a new Id ID3
would be Number_001
and then Number_002
and so on. I have done the following. I need help to get 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
Upvotes: 2
Views: 110
Reputation: 5239
You can do everything in one step:
dat1$ID3 <- paste0("Number_00",1:nrow(dat1))
It's possible, however, that you won't want two leading zeros when you get to double digits. If that's the case you can do this (note that I increased to ten rows by duplicating the last four rows in your example):
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
With the first method, the last ID3
would be Number_0010
.
Upvotes: 2
Reputation: 70266
You can use do.call
to call paste0
on every row of the data:
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
Upvotes: 2