删除R中的冗余列

Cha*_*lah 8 merge r

我有类似的东西:

date        pgm      in.x     logs       out.y
20130514    na       12       j1         12
20131204    z2       03       j1         03
20130516    a01      04       j0         04
20130628    z1       05       j2         05
Run Code Online (Sandbox Code Playgroud)

我注意到in和out值总是一样的,所以我想删除out.y列.我有这样的其他列我希望能够检测匹配.x列的任何.y列并在合并后删除它们.

Ale*_* A. 10

如果我们假设应删除所有列冗余

no_duplicate <- data_set[!duplicated(as.list(data_set))]
Run Code Online (Sandbox Code Playgroud)

会做的.

as.list将data.frame转换为其所有列的列表,duplicated并将返回那些列的索引,这些列的所有值都是先前看到的列的副本.

这并不直接尝试比较.x和.y列,但具有保留每个重复列的一个副本的效果,我认为这是主要目标.另一方面,它还将删除与另一个.x列重复的任何.x列.


如果我们想要保留所有.x列,即使是那些重复的列,一个好的解决方案可能是在合并之前进行过滤.假设你已经data_xdata_y那个将被"标识符"列合并:

data_y_nonredundant <- data_y[!(as.list(data_y) %in% as.list(data_x) & names(data_y)!="identifier")]
data <- merge(data_x, data_y_nonredundant, by=c("identifier"))
Run Code Online (Sandbox Code Playgroud)