从数据矩阵中删除空标题列

时间:2016-06-08 09:13:21

标签: r matrix

我有一个带有标题的矩阵,如下所示:

"ID" "age" "sex" "status" "" "fup"

 1 32 f 1 5 20

 2 45 m 0 6 35

 3 21 f 1 8 5

如何删除缺少标题值的列? (即标题为""

的列

5 个答案:

答案 0 :(得分:3)

我们可以对矩阵的列名使用nzchar来返回非空/空名称的TRUE/FALSE值的逻辑索引。然后,根据该索引,对列进行子集化。

 m1[,nzchar(colnames(m1))]

如果数据集具有混合类,则最好将其存储在listdata.frame中。

答案 1 :(得分:2)

通过将matrix转换为dataframe

,可以实现其中一个解决方案
 mat <- matrix(1:10, ncol=2, dimnames =list(1:5, c("col1", "")))
 mat
 mat1 <- as.data.frame(mat)
 mat1 
 names(mat1)[2] <- ""
 result <- mat1[!names(mat1)==""]
 result

答案 2 :(得分:1)

由于您没有相同类型的数据(除了“性别”之外,所有列都是数字),最好使用数据框。

您可以使用as.data.frame()将矩阵转换为数据框。这将使用V后跟列索引替换所有空列名称(例如,在您的示例中,空字符串将替换为“V5”)。

您可以使用grepl()过滤掉以“V”开头的列,但我建议使用dplyr包中的select函数,因为它会产生更易读的代码:

as.data.frame(your_example_matrix) %>% select(-matches("^V"))

答案 3 :(得分:0)

您可以使用grepl函数删除列名称&#34; &#34;

mat <- matrix(1:20, ncol=4, dimnames =list(1:5, c("col1", "col2", "col3", "")))

mat1 <- data.frame(mat)

names(mat1)[4] <- ""

mat1[,grepl("[A-z]",colnames(mat1))]

  col1 col2 col3
1    1    6   11
2    2    7   12
3    3    8   13
4    4    9   14
5    5   10   15 

从@sowmya复制的#data

答案 4 :(得分:0)

以上答案对我不起作用。假设您有一个带有一些空标题的数据框,并且您想删除带有空标题的列。

其中 df 是您的数据框:

df <- df[!is.na(names(df))]