3

I'm trying to concatenate the values in the data frame (df1) below row-wise, and get the result of (df2).

# Input
df1 <- data.frame (first_column  = c("A", "B", "C", "D"),
                  second_column = c("var1", "var2", "var3", "var4"),
                  third_column  = c("var5", "var6", "var7", " "),
                  fourth_column = c("var8", "var9", " ", " "))
# Ouput
df2 <- data.frame (first_column = c("A var1", "B var2", "B var3", "B var4"),
                  second_column  = c("A var5", "B var6", "B var7", "B "),
                  thrid_column = c("A var8", "B var9", "B ", "B "))

My best result so far was with the following code, but not what I wanted:

# Get the number of columns as df1 will differ in size from time to time,
and the only thing I'd like to change to the script is the file path for df1.

nc <- ncol(df1)
 
df2 <- data.frame(paste(df1$first_column, df1[,c(2:nc)]))

Any 💭 ideas and feedback would be much appreciated. 😁

1 Answer 1

2

We may loop across the columns from 'second_column' to the last, paste (str_c) the first_column with the column values and rename the columns

library(dplyr)
library(stringr)
df1 %>% 
  transmute(across(second_column:last_col(), 
   ~ str_c(first_column, .x, sep = ' '))) %>%
  rename_with(~ names(df1)[-length(.x)])

-or using base R

df2 <- df1
df2[-ncol(df1)] <- lapply(df1[-1], \(x) paste(df1$first_column, x))
df2 <- df2[-ncol(df2)]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.