假设我有以下数据框:
> 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”的列,并将它们放入单个命令中的新数据框中?在我的真实数据中,我有很多列具有重复的姓,并且我不知道列的索引,所以我无法按数字获取它们。
答案 0 :(得分:2)
出于实际原因,建议不要使用相同的列名。但是,我们可以进行比较(==
以获取逻辑向量,并使用该向量来提取列
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])