r循环重新编码在不同的数据帧中

时间:2017-08-29 13:49:32

标签: r loops

我正在尝试使用for循环在数据帧之间重新编码数据,并且我不断收到错误。

对于背景,df1 [,1]称为“Code”,有111个不同的观察值,df1 [,2]称为“KDE Code”。 df2 [,1]也称为“代码”,有14000个观测值(有些值具有相同的值df1,有些则没有)。我想根据df1中的值重新编码df2 [,1]中的值。

例如,如果df2 [,1] == df1 [,2]那么我想重新编码它以匹配df1 [,1]中的内容,但保持其他内容相同(以便我以后可以合并它们)。

一个真实的例子是学校在df1中被识别为012301,但是df2告诉我学校012301应该是14916.我已经尝试过for循环来改变它们,但我没有运气。

这是我的代码,我将不胜感激任何帮助!

for (i in 1:258) { 
ifelse(df2[,1] == df1[i,3], df2[,1] <- df1[i,2], df2[,1]) 
}

This is what I have

    <pre><code>`df1
     [,1] [,2]
[1,]    1  101
[2,]    2  202
[3,]    3  303`

    <pre><code>`df2
     [,1]
[1,]  101
[2,]  202
[3,]  303
[4,]  404`

This is what I need

<pre><code>`df2 [,1] [1,] 1 [2,] 2 [3,] 3 [4,] 404`

1 个答案:

答案 0 :(得分:0)

这是一个快速而肮脏的解决方案:

df1<-data.frame(pre=c(1, 2, 3), code=c(101, 202, 303))
df2<-data.frame(code=c(101, 202, 303, 404))

library(dplyr)
#Merge columns
newdf<-left_join(df2, df1)
#find NA rows and replace by first column
newdf$pre[is.na(newdf$pre)]<-newdf$code[is.na(newdf$pre)]
#drop the extra column
newdf<-data.frame(pre=newdf[,-1])

它会产生你想要的&#34; pre&#34;列作为数据帧。