删除R

时间:2016-06-01 09:02:53

标签: r merge

我有类似的东西:

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

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

3 个答案:

答案 0 :(得分:10)

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

no_duplicate <- data_set[!duplicated(as.list(data_set))]

会做到这一点。

as.list会将data.frame转换为其所有列的列表,duplicated将返回那些列中所有值都与之前看到的列重复的列的索引。

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

如果我们想保留所有.x列,即使是那些重复的列,一个好的解决方案可能是在合并之前过滤 。假设您将data_xdata_y合并为列&#34;标识符&#34;:

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"))

答案 1 :(得分:0)

我为你的数据框创建了另一个变量,它是out.y

的副本
x <- data.frame(date  = c("20130514","20131204","20130516","20130628"),
  pgm = c(NA, "z2", "a01", "z1"), in.x= c(12, 3, 4, 5), out.y= c(12, 3, 4, 5),new.y = c(12, 3, 4, 5))

y <- x[grepl(".x|.y",colnames(x))]

 in.x out.y new.y
1   12    12    12
2    3     3     3
3    4     4     4
4    5     5     5

y$in.x==y[,c("out.y","new.y")]
     out.y new.y
[1,]  TRUE  TRUE
[2,]  TRUE  TRUE
[3,]  TRUE  TRUE
[4,]  TRUE  TRUE

x <- x[,1:3]

      date  pgm in.x
1 20130514 <NA>   12
2 20131204   z2    3
3 20130516  a01    4
4 20130628   z1    5

答案 2 :(得分:-3)

我们同事的这些答案无疑是正确的,但更简单的方式是:

dataframe[,5]  <- NULL