我有一个巨大的数据框。我想过滤所有其值都等于1的列。
这是我的数据示例。
A = c(1,2,3,4,5,6,1,1,1,1,1,1,2,3,1,4,5,6,1,1,1,1,1,1,2,3,4,1,3,3,1,1,1,1,1,1)
M <- matrix(A, ncol = 6, nrow = 6, byrow = F)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 2 1 2 1
[2,] 2 1 3 1 3 1
[3,] 3 1 1 1 4 1
[4,] 4 1 4 1 1 1
[5,] 5 1 5 1 3 1
[6,] 6 1 6 1 3 1
所需的输出如下:
[,1] [,2] [,3]
[1,] 1 2 2
[2,] 2 3 3
[3,] 3 1 4
[4,] 4 4 1
[5,] 5 5 3
[6,] 6 6 3
我想使用dplyr或其他R函数中的过滤器函数。 你知道我该怎么做吗? 谢谢
答案 0 :(得分:2)
您可以使用@Override
public void start(Stage stage) throws Exception {
HBox container = new HBox(20);
container.setPrefHeight(40);
Button addFirst = new Button("add head");
Button addLast = new Button("add tail");
Button remove = new Button("remove");
TextField textField = new TextField();
HBox buttonContainer = new HBox(10, textField, addFirst, addLast, remove);
final LinkedList<Integer> list = new LinkedList<>();
addFirst.setOnAction(evt -> {
String text = textField.getText();
Integer value = Integer.parseInt(text);
list.addFirst(value);
container.getChildren().add(0, new Label(text));
});
addLast.setOnAction(evt -> {
String text = textField.getText();
Integer value = Integer.parseInt(text);
list.addLast(value);
container.getChildren().add(new Label(text));
});
remove.setOnAction(evt -> {
String text = textField.getText();
int value = Integer.parseInt(text);
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
if (element == value) {
container.getChildren().remove(iterator.nextIndex() - 1);
iterator.remove();
break;
}
}
});
VBox root = new VBox(container, buttonContainer);
Scene scene = new Scene(root, 500, 400);
stage.setScene(scene);
stage.show();
}
获取等于colMeans(M == 1)
的每一列的百分比,然后选择那些百分比不等于1
(即100%)的列。
1
如果您有数据框,则M[, colMeans(M == 1) != 1]
# [,1] [,2] [,3]
# [1,] 1 2 2
# [2,] 2 3 3
# [3,] 3 1 4
# [4,] 4 4 1
# [5,] 5 5 3
# [6,] 6 6 3
的解决方案是使用dplyr
select_if
请注意,library(dplyr)
df %>%
select_if(~ any(. != 1))
# V1 V3 V5
# 1 1 2 2
# 2 2 3 3
# 3 3 1 4
# 4 4 4 1
# 5 5 5 3
# 6 6 6 3
和colMeans
都有一个any
参数,如果您的数据具有na.rm
值,则可以使用该参数。
答案 1 :(得分:1)
不确定您的意思,我会同时提供。
矩阵
M[, apply(M, 2, function(a) !all(a == 1)) ]
# [,1] [,2] [,3]
# [1,] 1 2 2
# [2,] 2 3 3
# [3,] 3 1 4
# [4,] 4 4 1
# [5,] 5 5 3
# [6,] 6 6 3
数据框
D <- as.data.frame(M)
D[,sapply(D, function(a) !all(a == 1))]
# V1 V3 V5
# 1 1 2 2
# 2 2 3 3
# 3 3 1 4
# 4 4 4 1
# 5 5 5 3
# 6 6 6 3