删除R中的不变列

时间:2013-10-02 14:01:36

标签: r

如果列[2:nrow(df), ]

不变,我想删除它

无法让这个工作。对于R和编程而言仍然是新手。

red    <- c(1, 2, 3)
blue   <- c(4, 5, 4)
green  <- c(4, 7, 2)
colors <- data.frame(red, blue, green)
colors <- t(colors)
colors

      [,1] [,2] [,3]
red      1    2    3
blue     4    5    4
green    4    7    2

如何根据蓝色和绿色的不变性逻辑删除第1列。它并不特别需要是方差,任何方法都可以删除具有所有相同值的列来完成工作。

非常感谢!

1 个答案:

答案 0 :(得分:3)

删除列,只需将对象重新分配给列:

colors <- colors[, -1]
colors

#       [,1] [,2]
# red      2    3
# blue     5    4
# green    7    2

如果您要删除的列列表(技术上是vector,而不是R list),请使用:

toDrop <- c( <whichever columns to drop> )
colors <- colors[, -toDrop]

或者,如果您知道自己要保留哪个:

toKeep <- c( <whichever columns to keep> )
colors <- colors[, toKeep]

至于确定它是否是不变的,请使用duplicated,但不要直接使用data.frame,而是使用函数apply上的每个列。

toDrop <- apply(colors[2:nrow(colors), ], 2, function(x) all(duplicated(x)[-1] ))

# Optionally:
toDrop <- which(toDrop)
if (length(toDrop))
   colors <- colors[, -toDrop]