我有一个看起来与下面类似的数据帧。
set.seed(12)
size <- sample(100:1000, 7)
var <- c("V3", "V4", "V5", "V6", "V7", "V8", "V9")
dist <- matrix(runif(100), nrow = 7, ncol = 7)
diag(dist) <- 0
df <- as.data.frame(cbind(var, size, dist))
这导致了一个看起来像这样的数据集:
var size V3 V4 V5 V6 V7 V8 V9
1 V3 549 0 0.264918377622962 0.787836347473785 0.439429325051606 0.941087544662878 0.97763589094393 0.774718186818063
2 V4 445 0.0228777434676886 0 0.0978530396241695 0.669819295872003 0.693911424372345 0.197649595327675 0.394586439244449
3 V5 435 0.00832482660189271 0.457607151241973 0 0.240883231163025 0.843702238984406 0.844225987326354 0.361513090785593
4 V6 346 0.392697197152302 0.540707547217607 0.217823043232784 0 0.384644460165873 0.0950279189273715 0.421090044546872
5 V7 958 0.813880559289828 0.665679829893634 0.267943592974916 0.882756386883557 0 0.381151003297418 0.322011524345726
6 V8 273 0.37624845537357 0.112698937533423 0.504767951788381 0.814063254510984 0.58848182996735 0 0.552160830702633
我想删除在变量var
中找不到列名的列(在本例中是名称为V9
的列(。我还想保留前两列var
和size
。这导致一个数据集看起来像这样:
var size V3 V4 V5 V6 V7 V8
1 V3 549 0 0.264918377622962 0.787836347473785 0.439429325051606 0.941087544662878 0.97763589094393
2 V4 445 0.0228777434676886 0 0.0978530396241695 0.669819295872003 0.693911424372345 0.197649595327675
3 V5 435 0.00832482660189271 0.457607151241973 0 0.240883231163025 0.843702238984406 0.844225987326354
4 V6 346 0.392697197152302 0.540707547217607 0.217823043232784 0 0.384644460165873 0.0950279189273715
5 V7 958 0.813880559289828 0.665679829893634 0.267943592974916 0.882756386883557 0 0.381151003297418
6 V8 273 0.37624845537357 0.112698937533423 0.504767951788381 0.814063254510984 0.58848182996735 0
使用%in%
查找要保留的变量,然后用TRUE
手动替换前两个值。
col.keep <- colnames(df) %in% df$var
col.keep[1:2] <- TRUE
df2 <- df[col.keep]
如果您不知道df$var
和df$size
的位置,请手动将它们绑定到.中
col.keep <- colnames(df) %in% df$var
df3 <- cbind(df$var, df$size, df[col.keep])
查看pivot_longer
,并将列V*放入行中。然后,您可以只筛选这些列并返回。