我有一个带有标题的矩阵,如下所示:
"ID" "age" "sex" "status" "" "fup"
1 32 f 1 5 20
2 45 m 0 6 35
3 21 f 1 8 5
如何删除缺少标题值的列? (即标题为""
)
答案 0 :(得分:3)
我们可以对矩阵的列名使用nzchar
来返回非空/空名称的TRUE/FALSE
值的逻辑索引。然后,根据该索引,对列进行子集化。
m1[,nzchar(colnames(m1))]
如果数据集具有混合类,则最好将其存储在list
或data.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))]