首页 > 解决方案 > R,代码在没有 for 循环的情况下工作,但不在循环内

问题描述

我想用在另一个数据帧(结果,40 行)中找到的值替换某个数据帧(driftm,4 列,6904​​2 行)的一列(分数)的条目。

我的想法如下:

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))]))
}

这是数据框driftm 这是数据框结果

所以基本上我想替换,现在写为“替换”的正确字符串为所述分数,取自 results$Fraction。

有什么更优雅的方法可以做到这一点?

标签: rloopsfor-looprstudio

解决方案


稍微优雅的解决方案:

数据:

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

推荐阅读