R,代码在没有for循环的情况下有效,但在内部循环中无效

时间:2018-11-09 15:33:41

标签: r loops for-loop rstudio

我想用另一个数据帧(结果,40行)中找到的值替换某个数据帧(漂移,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))]))
}

This is the dataframe driftm This is the dataframe results

所以基本上我想替换为现在所说的“分数”,用正确的表示分数的字符串,从results $ Fraction中删除。

什么是更优雅的方式呢?

2 个答案:

答案 0 :(得分:0)

发现我的问题

尽管仍然对更优雅的解决方案感兴趣,但我的简单错误是for循环的定义。

for (i in **1:**length(driftm$variable){
driftm$Fraction[i] <-
as.vector((results$Fraction[match((driftm$variable[i]), (results$WorkingCode))]))
}

答案 1 :(得分:0)

稍微优雅的解决方案:

数据:

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