gpt4 book ai didi

r - 如何一次获取R中具有相同列名的所有列?

转载 作者:行者123 更新时间:2023-12-04 12:20:16 25 4
gpt4 key购买 nike

假设我有以下数据框:

> test <- cbind(test=c(1, 2, 3), test=c(1, 2, 3))
> test
test test
[1,] 1 1
[2,] 2 2
[3,] 3 3

现在从这样的数据框中,我想将所有名为“test”的列提取到一个新的数据框中:
> new_df <- test[, "test"]

但是,这最后一次尝试仅获取测试数据框中名为“test”的第一列:
> new_df
[1] 1 2 3

如何在此示例中获取所有名为“test”的列并将它们放入单个命令中的新数据框中?在我的真实数据中,我有很多列具有重复的列名,但我不知道列的索引,所以我无法按数字获取它们。

最佳答案

出于实际原因,不建议使用相同的列名。但是,我们可以做一个比较( == )来得到一个逻辑向量并用它来提取列

i1 <- colnames(test) == "test"
new_df <- test[, i1, drop = FALSE]

请注意 data.frame不允许重复的列名,并通过附加 .1 将其更改为唯一的 .2等结尾是 make.unique .与 matrix (OP 的数据集),允许有重复的列名或行名(虽然不推荐)

此外,如果有多个重复的列名并希望将它们选择为单独的数据集,请使用 split
lst1 <- lapply(split(seq_len(ncol(test)), colnames(test)), function(i)
test[, i, drop = FALSE])

或者循环通过 unique列名并做一个 ==通过使用 lapply 循环遍历它
lst2 <- lapply(unique(colnames(test)), function(nm) 
test[, colnames(test) == nm, drop = FALSE])

关于r - 如何一次获取R中具有相同列名的所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com