I have the following vector:
samples <- c("bl", "ra", "ye", "gp", "dk")
which I would like to add to the dataframe
df <- data.frame(Country = "FR", Name = "Jean", A="",B="",C="",D="",E="",F="",G="",H="",I="",J="",L="",M="",N="",O="",P="",Q="",R="",S="",T="",U="",V="",W="ok",X="ok",Y="ok",Z="ok",A1="ok",B1="ok")
and give the output
Country Name A B C D E F G H I J K L M N O P Q R S T ....
1 FR Jean bl ra ye gp dk
The aim:
- Place elements within the vector into the dataframe that already contains some values.
- The first element has to be in column 3
- Subsequent elements have to be in every 5th column from the first element i.e columns 7, 11, 15, 19, ... (4i-1)
- A for loop that automatically adds the elements every 5th column from the first element. Depending on the situation, I may have a much longer vector than what I specified. It would be tedious to assign each element to the column names individually.
CodePudding user response:
There is no need of a loop. You can directly assign samples
to the corresponding columns.
df[, seq_along(samples) * 4 - 1 2] <- samples
df
# Country Name A B C D E F G H I J L M N O P Q R S T U V W X Y Z A1 B1
# 1 FR Jean bl ra ye gp dk ok ok ok ok ok ok
CodePudding user response:
First define a target_pos
vector containing the position of your target columns, then iterate over the vector to append samples
to your df
.
Note there's some differences between your input df
and your desired output. For example you don't have column K
in your df but you have that in your desired output.
target_pos <- seq(5, 5*length(samples) - 4, 4)
for (i in 1:length(target_pos)) df[, target_pos[i]] <- samples[i]
df
#> Country Name A B C D E F G H I J L M N O P Q R S T U V W X Y Z A1 B1
#> 1 FR Jean bl ra ye gp dk ok ok ok ok ok ok
Data
df<-data.frame(Country = "FR", Name = "Jean", A="",B="",C="",D="",E="",F="",G="",H="",I="",J="",L="",M="",N="",O="",P="",Q="",R="",S="",T="",U="",V="",W="ok",X="ok",Y="ok",Z="ok",A1="ok",B1="ok")
samples=c("bl","ra","ye","gp","dk")