'Create dataframe based on matching

I want to create a df in R with two variables, they have different number of rows. This is an abstract example: I want to match a 3 to "Fail" (without writing in manually, I know that I could just write the 3 in a on the third place). So first assign 3 to Fail, than match 1 to Test, 2 to Test, 4 to Success and 5 to Test by skipping Fail.

a <- c(1,2,4,5)
b <- c("Test", "Test", "Fail", "Success", "Test")
data.frame(a,b)

So the following steps would be important:

1st: find string "Fail": assign a certain value to it (here 3)

2nd: create a df with a and b

3rd: final result should look like this:

a b
1 Test
2 Test
3 Fail
4 Success
5 Test


Solution 1:[1]

idx <- which(b == "Fail")
a <- append(a, idx, after = idx - 1)
#[1] 1 2 3 4 5

data.frame(a, b)
  a       b
1 1    Test
2 2    Test
3 3    Fail
4 4 Success
5 5    Test

Solution 2:[2]

You don't need to create both vectors. If you are going with indexes, you can just do,

data.frame(a = seq_along(b), b = b)

  a       b
1 1    Test
2 2    Test
3 3    Fail
4 4 Success
5 5    Test

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Sotos