首页 > 解决方案 > 连接具有相同后缀的变量对

问题描述

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

first.1 second.1 first.2 second.2 
1222 3223 3333 1221 
1111 2212 2232 2113 

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

df$concatenated.1 <- paste0(df$first.1,"-",df$second.1)
df$concatenated.2 <- paste0(df$first.2,"-",df$second.2)

这导致以下数据框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 

我有超过 2 对变量要连接,所以我想在 for 循环中执行此操作:

for (i in 1:2){
??
}

关于如何做到这一点的任何想法?

标签: rfor-loop

解决方案


如果您能找到一种拆分列的方法,那么它会容易得多。例如,根据提供的示例,我们可以根据列名的最后一个字符(1、1、2、2)拆分列。

使用基础 R,我们使用split.default基于名称(如上所述)拆分列,并且对于每个组,我们paste每行并添加新列。

group_names <- substring(names(df), nchar(names(df)))
df[paste0("concatenated.", unique(group_names))] <- 
     lapply(split.default(df,group_names),  function(x)  do.call(paste, c(x, 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

推荐阅读