これらの列のすべてが各データフレームに存在しない場合に、データフレームのリストから特定の列を削除する方法

MGJ-123

サンプルデータセットは次のとおりです。

dat1 <- structure(list(id = 1:3, des.1 = 4:6, x = 7:9, not = 10:12), class = "data.frame", row.names = c(NA,-3L))
dat2 <- structure(list(id = 1:3, descript = 4:6, y = 7:9, yes = 10:12), class = "data.frame", row.names = c(NA,-3L))
dat3 <- structure(list(id = 1:3, description = 4:6, x = 7:9, X4 = 10:12), class = "data.frame", row.names = c(NA,-3L))
dat_list <- list(dat1, dat2, dat3)

たとえば、このデータフレームのリスト全体でxおよびX4という名前のすべての列を削除したい場合は、次のように実行できます。これらの列を含む各データフレームにアクセスし、次のように削除します。

dat_list[[1]] <- dat_list[[1]] %>% select(-x)
dat_list[[3]] <- dat_list[[3]] %>% select(-c("x", "X4"))

ただし、リスト全体でこれを行う方法があるかどうか疑問に思っています。これらの列の一部は、リスト内の各データフレームに存在しないことに注意してください。

このリスト内のすべてのデータフレームでc( "x"、 "X4")という名前のすべての列を削除できる方法を誰かが考えられますか?

user63230

1つのアプローチは次のとおりです。

library(tidyverse)
map(dat_list, function(xx) xx %>% select(any_of(c("x", "X4"))))
# [[1]]
#   x
# 1 7
# 2 8
# 3 9

# [[2]]
# data frame with 0 columns and 3 rows

# [[3]]
#   x X4
# 1 7 10
# 2 8 11
# 3 9 12

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ