需要R函数来比较一个文件中缺少的值和另一个文件中的更新
我有3个csv文件,读作df需要R函数来比较一个文件中缺少的值和另一个文件中的更新,r,function,dataframe,R,Function,Dataframe,我有3个csv文件,读作df df1 - Code Number A 12 B 13 C 14 D 15 E 16 F 17 G 18 df2只包含代码。这些代码是强制性代码,必须出现在df1中。如果df1中缺少df2中的任何代码,则应将其添加到df1中,并从df3更新其相应的“编号”列 dF2 - Code A B C X df3 Code Number A 22 B 34 C 56 D
df1 -
Code Number
A 12
B 13
C 14
D 15
E 16
F 17
G 18
df2只包含代码。这些代码是强制性代码,必须出现在df1中。如果df1中缺少df2中的任何代码,则应将其添加到df1中,并从df3更新其相应的“编号”列
dF2 -
Code
A
B
C
X
df3
Code Number
A 22
B 34
C 56
D 78
X 99
Y 100
这里缺少来自df2的X。因此,应该将其添加到df1,并从df3中提取其编号
dF2 -
Code
A
B
C
X
df3
Code Number
A 22
B 34
C 56
D 78
X 99
Y 100
输出-
df1 -
Code Number
A 12
B 13
C 14
D 15
E 16
F 17
G 18
X 99
我有代码,这是工作良好,以满足这个条件
然而,我希望一切都通过一个函数来完成
我的功能应该是这样的-
If any code present in df2 is missing in df1 then
{
i) get that code from df2
ii) get the number for that code from df3
iii) append that code and number to df1.
} else {
df1<-df1
}
如果df2中存在的任何代码在df1中丢失,则
{
i) 从df2获取该代码
ii)从df3获取该代码的编号
iii)将该代码和编号附加到df1。
}否则{
df1%
选择(-c(count.x,count.y))
df1执行此任务不需要循环。更快的方法是使用如下所示的合并函数:
# sample data
df1 <- data.table(code=c('A','B','C'), Number=c(10,20,30))
df2 <- data.table(code = c('A','B','X'))
df3 <- data.table(code=c('A','X','C'), Number=c(10,200,30))
# join df1 and df2 - full join
df_temp <- merge(df1, df2, by = "code", all = TRUE)
# join again df1 and df3 - full join
df4 <- merge(df_temp, df3, by = "code", all = TRUE)
# fill missing value
fill_values <- function(x){
if(is.na(x['Number.x'])) return(x['Number.y'])
else return (x['Number.x'])
}
df4$Number <- apply(df4, 1, fill_values)
# select final columns
df4 <- df4[,c('code','Number'),with=F]
print(df4)
code Number
1: A 10
2: B 20
3: C 30
4: X 200
#示例数据
df1该代码工作正常。但是它将df3中的所有代码及其值插入df1中。我希望插入df1中缺少的df2中的代码,并从df3中提取其编号。