我有一个数据框,其中包含许多变量,我想在同一个数据框中连接成新的变量.我的数据框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)
有关如何实现这一目标的任何想法?
如果您的真实数据的名称遵循清晰的模式(如本示例数据所示),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)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |