我想用另一个数据帧(结果,40行)中找到的值替换某个数据帧(漂移,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))]))
}
This is the dataframe driftm This is the dataframe results
所以基本上我想替换为现在所说的“分数”,用正确的表示分数的字符串,从results $ Fraction中删除。
什么是更优雅的方式呢?
答案 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