r - R,代码在没有 for 循环的情况下工作,但不在循环内
问题描述
我想用在另一个数据帧(结果,40 行)中找到的值替换某个数据帧(driftm,4 列,69042 行)的一列(分数)的条目。
我的想法如下:
driftm$Fraction[i] <-
as.vector((results$Fraction[match((driftm$variable[i]), (results$WorkingCode))]))
我检查的变量 (drift$variable) 是一个因素,因此我转换为向量。当手动将 i 设置为driftm$value 长度内的任何值时,代码会工作并相应地替换。但是在 for 循环中它什么也不做。
for (i in length(driftm$values)){
driftm$Fraction[i] <-
as.vector((results$Fraction[match((driftm$variable[i]), (results$WorkingCode))]))
}
所以基本上我想替换,现在写为“替换”的正确字符串为所述分数,取自 results$Fraction。
有什么更优雅的方法可以做到这一点?
解决方案
稍微优雅的解决方案:
数据:
driftm<-data.frame(Fraction=1:10, Variable=c(letters[1:5],letters[5:1]))
results<-data.frame(Fraction=10:11, WorkingCode=c(letters[2:3]))
使用dplyr
:
library(dplyr)
driftm$Fraction<-left_join(driftm,results,by=c("Variable"="WorkingCode")) %>%
with(coalesce(Fraction.y,Fraction.x))
结果:
Fraction Variable
1 1 a
2 10 b
3 11 c
4 4 d
5 5 e
6 6 e
7 7 d
8 11 c
9 10 b
10 10 a
推荐阅读
- php - PHP:用增量整数替换键
- c# - 循环播放的音频文件结束了吗?
- go - protoc-gen-go 不在 linux 机器上执行
- data-structures - 为什么单链表的head_node(first_node)初始化时动态分配释放“两次”?
- javascript - 如何查看 Vue / Nuxt.js 中的浏览历史记录?
- sql - 聚合行以获得没有子集的唯一数组
- mongodb - 有没有办法在 mongo 的聚合函数中更新文档?
- expo - 将 wsl1 切换到 wsl2 后,expo 不会启动
- c - Program C, mv: cannot stat No such file or directory
- qml - QML TreeView 中的 foreach 委托