连接具有相同后缀的变量对

Abd*_*del 8 for-loop r

我有一个数据框,其中包含许多变量,我想在同一个数据框中连接成新的变量.我的数据框df的简化版本如下所示:

first.1 second.1 first.2 second.2 
1222 3223 3333 1221 
1111 2212 2232 2113 
Run Code Online (Sandbox Code Playgroud)

这是我如何在没有for循环的情况下效率低下:

df$concatenated.1 <- paste0(df$first.1,"-",df$second.1)
df$concatenated.2 <- paste0(df$first.2,"-",df$second.2)
Run Code Online (Sandbox Code Playgroud)

这导致以下数据框df:

first.1 second.1 first.2 second.2 concatenated.1 concatenated.2 
1222 3223 3333 1221 1222-3223 3333-1221 
1111 2212 2232 2113 1111-2212 2232-2113 
Run Code Online (Sandbox Code Playgroud)

我有超过2对变量连接,所以我想在for循环中这样做:

for (i in 1:2){
??
}
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一目标的任何想法?

Ice*_*can 4

如果您的真实数据的名称遵循清晰的模式(如本示例数据所示),Ronak 的split/lapply答案可能是最好的。如果没有,您可以创建名称向量并Map与 一起使用paste。

new.names <- paste0('concatenated.', 1:2)
names.1 <- paste0('first.', 1:2)
names.2 <- paste0('second.', 1:2)

df[new.names] <- Map(paste, df[names.1], df[names.2], sep = '-')

df

#   first.1 second.1 first.2 second.2 concatenated.1 concatenated.2
# 1    1222     3223    3333     1221      1222-3223      3333-1221
# 2    1111     2212    2232     2113      1111-2212      2232-2113
Run Code Online (Sandbox Code Playgroud)