我在全局环境中的 R 中有一个数据框:
file_1 <- data.frame(A = 1:5, B = 6:10, C = 11:15)
file_2 <- data.frame(A = 1:5, D = 16:20, E = 21:25)
file_3 <- data.frame(B = 6:10, C = 11:15, F = 26:30)
我想制作一个矩阵,帮助我了解哪些列名称在所有数据框中常见,哪些不是。
我尝试手动执行此操作:
for (file in files) {
data <- get(file)
column_names[[file]] <- colnames(data)
}
all_columns <- unique(unlist(column_names))
matrix <- sapply(column_names, function(cols) all_columns %in% cols)
rownames(matrix) <- all_columns
matrix_df <- as.data.frame(matrix)
print(matrix_df)
这是在 R 中执行此操作的正确方法吗?
顺便说一句,如果它们在列表中,我想我们可以这样做:
all_columns <- unique(unlist(lapply(mylist, colnames)))
matrix <- sapply(mylist, function(df) all_columns %in% colnames(df))
rownames(matrix) <- all_columns
matrix_df <- as.data.frame(matrix)
print(matrix_df)
你的意思是像下面这样的矩阵吗?
> table(stack(lapply(mget(ls(pattern = "file_")), names)))
ind
values file_1 file_2 file_3
A 1 1 0
B 1 0 1
C 1 0 1
D 0 1 0
E 0 1 0
F 0 0 1