r - 连接具有相同后缀的变量对
问题描述
我有一个数据框,其中包含许多变量,我想将它们连接到同一数据框中的新变量中。我的数据框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){
??
}
关于如何做到这一点的任何想法?
解决方案
如果您能找到一种拆分列的方法,那么它会容易得多。例如,根据提供的示例,我们可以根据列名的最后一个字符(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
推荐阅读
- python - 如何证明高斯金字塔的脉冲响应是尺度不变的?
- swift - Swift 属性包装器。通过引用分配
- java - Spring如何选择服务实现?
- swiftui - SwiftUI 中的列表视图在列表上方显示我无法摆脱的灰色区域
- javascript - listItems.forEach 不是函数
- c# - C#删除一个字符之后但另一个字符之前的所有内容
- c++ - 播放/暂停/停止 MP3 音频文件 | (视觉)C++
- python-3.x - Python打印所有公钥证书信息(X.509格式)
- javascript - 将正则表达式值与切片值连接起来
- node.js - 谷歌云发布/订阅功能在查询 Firestore 时给出“请求的快照版本太旧”