R函数比较csv文件并列出具有相同列名的行之间更改的内容
我试图在r中编写一个函数,它获取两个具有相同列数和相同列名的相当大的csv文件,并比较行。但是我很难比较这些行,因为我想让函数返回数据在哪个列中变化。例如,我的数据帧/csv可能是: csv1: csv2: 我想让函数填充一个表/其他数据框,它的内容从csv1更改为csv2:R函数比较csv文件并列出具有相同列名的行之间更改的内容,r,csv,R,Csv,我试图在r中编写一个函数,它获取两个具有相同列数和相同列名的相当大的csv文件,并比较行。但是我很难比较这些行,因为我想让函数返回数据在哪个列中变化。例如,我的数据帧/csv可能是: csv1: csv2: 我想让函数填充一个表/其他数据框,它的内容从csv1更改为csv2: qty name description price change 3 alpha number of alpha to order 20
qty name description price change
3 alpha number of alpha to order 20 qty
3 beta number of beta pieces 30 description
1 gamma number of gamma to order 40 price
1 epsilon number of epsilon to order 10 added
由于alpha的数量增加,beta的描述改变,gammas的价格也改变,我想把它们列出来,忽略delta中没有改变的地方,并显示epsilon是一个新添加的行,与第一个csv不同。这在r中可能吗?提前谢谢你
我当前的代码比较两个数据帧并输出3个csv文件。其中所有列在数据帧之间匹配,第二列与第一个数据帧具有唯一行,第三列与第二个数据帧仅具有唯一行。因此,我将比较后两个数据帧,因为第一个数据帧已经整理出所有列都相同的位置 如果按行比较,那么我们可以:
a <- which(df1!=df2,T)
data.frame(row = a[,1],change=names(df1)[a[,2]])
row change
1 1 qty
2 2 description
3 3 price
a您是否逐行比较,如果是这样,数据集是否为。相同大小我认为逐行排列是最合理的解决方案,而且数据帧的长度可能不同。可能仍有一些行更改了多个列,或者是一个全新的行,在这种情况下,如果发现多个更改,则更改列将显示“qty,description”。如果行数不同,则可能需要交叉连接,然后进行比较。抱歉,我不清楚,我相信这只适用于大小相同的数据帧,并且可能有一些行添加了新行,而不是从第一个csv修改。为了清晰起见,我将这个案例添加到了我原来的帖子中!非常感谢。这是否意味着行也可以删除?是的,csv 1中的行可能不再存在于csv中2@pbthehuman这是否意味着每行的名称都是唯一定义的?iealpha
位于第1行,不能位于任何其他行??正确,如果alpha位于第1行,则不会出现在csv1的任何其他行中
qty name description price change
3 alpha number of alpha to order 20 qty
3 beta number of beta pieces 30 description
1 gamma number of gamma to order 40 price
1 epsilon number of epsilon to order 10 added
a <- which(df1!=df2,T)
data.frame(row = a[,1],change=names(df1)[a[,2]])
row change
1 1 qty
2 2 description
3 3 price
df3 <- merge(df1,df2,by = "name",all = T)
df3$row <- 1:nrow(df3)
df_from <- df3[2:4]
df_to <- df3[5:7]
a <- which(df_from!=df_to,T)
nw <- data.frame(row = a[,1],change=names(df1)[a[,2]])
added <- cbind(row = which(is.na(df_from[,1])),change = "added")
#removed <- data.frame(row = which(is.na(df_to[,1])),change = "removed")
merge(df3,rbind(nw,added)) # rbind(nw,added,removed)
row name qty.x description.x price.x qty.y description.y price.y change
1 1 alpha 2 number of alpha to order 20 3 number of alpha to order 20 qty
2 2 beta 3 number of beta to order 30 3 number of beta pieces 30 name
3 4 epsilon NA <NA> NA 1 number of epsilon to order 10 added
4 5 gamma 1 number of gamma to order 10 1 number of gamma to order 40 description