r - 循环中的对象选择
问题描述
我目前在 R 中的循环中遇到对象选择的永久性问题。我相当确信这是一个常见问题,但我似乎找不到答案,所以我在这里......
这是我遇到的问题的一个实际示例:我有一个数据框作为源,其中包含一系列按顺序命名的变量(X1、X2、X3、X4 等)。我正在寻找一个函数,它将数据作为源匹配它到另一个数据集以创建一个新的组合数据集。
变量的数量会有所不同。我想向我的函数传递一个参数,告诉它我有多少变量,并且该函数需要相应地调整它将运行代码的次数。这似乎是 for 循环的一项任务,但似乎也没有一种简单的方法可以在循环中选择和重新创建变量。
这是我需要重复的代码:
new1$X1 <- data$X1[match(new1$matf1, data$rowID)]
new1$X2 <- data$X2[match(new1$matf1, data$rowID)]
new1$X3 <- data$X3[match(new1$matf1, data$rowID)]
new1$X4 <- data$X4[match(new1$matf1, data$rowID)]
new1$X5 <- data$X5[match(new1$matf1, data$rowID)]
(...)
return(new1)
我尝试过这样的事情:
for(i in 1:5) {
new1$Xi <- assign(paste0("X", i)), as.vector(paste0("data$X",i)[match(new1$matf1, data$rowID)])
}
没有成功。
谢谢您的帮助!
解决方案
您可以尝试这种简单的方法,但是连接会更有效:
vals <- paste0('X',1:5)
for(i in vals){
new1[[i]] <- data[[i]][match(new1$matf1, data$rowID)]
}
推荐阅读
- excel - 根据单元格值合并多列中的单元格
- google-bigquery - Google Data Studio:显示单个值而不是总和
- c - 通过将亲和性设置为单个 CPU 导致优先级线程调度中的饥饿
- android - “nativeFlushQueueImmediate”中的 C++ 异常 - react-native, bitcore-lib
- swift - 如何观察 SignalProducer 数组的新值
- sql - 具有不同日期的列到行
- javascript - 判断用户是否真的关闭了浏览器
- java - 如何链接 MethodHandle 调用?
- quill - 使用 Quill 进行基于块的编辑
- haskell - 如何将类型(来自 TemplateHaskell)转换为代理?