【问题标题】:Removing the "" in the matrix in R in order to work with rows with non empty elements for a list删除 R 中矩阵中的“”,以便处理列表中具有非空元素的行
【发布时间】:2015-10-03 05:24:05
【问题描述】:

我有一个名为:combination_mat 的矩阵,它看起来像这样:

combination_mat <- read.csv("Data.csv")

combination_mat <- as.matrix(na.omit(combination_mat))

组合垫

    X1        X2        X3       X4      
1  "FF"      "WGS10YR" "WTB3MS" "STLFSI"  
2  "FF"      "WGS10YR" "STLFSI" ""      
3  "WGS10YR" "WTB3MS"  "STLFSI" ""      
4  "FF"      "WTB3MS"  "STLFSI" ""      
5  "FF"      "WGS10YR" "WTB3MS" ""      
6  "FF"      "WTB3MS"  ""       ""      
7  "FF"      "STLFSI"  ""       ""      
8  "WGS10YR" "STLFSI"  ""       ""      
9  "WGS10YR" "WTB3MS"  ""       ""      
10 "FF"      "WGS10YR" ""       ""      
11 "STLFSI"  "WTB3MS"  ""       ""      
12 "FF"      ""        ""       ""      
13 "WGS10YR" ""        ""       ""      
14 "WTB3MS"  ""        ""       ""      
15 "STLFSI"  ""        ""       ""

但是,在使用lapply() 循环每一行之后,我最终得到了包含元素和空元素的列表,例如"".

我正在寻找的结果如下所示:

组合垫

    X1        X2        X3       X4      
1  "FF"      "WGS10YR" "WTB3MS" "STLFSI"  
2  "FF"      "WGS10YR" "STLFSI"     
3  "WGS10YR" "WTB3MS"  "STLFSI"     
4  "FF"      "WTB3MS"  "STLFSI"    
5  "FF"      "WGS10YR" "WTB3MS"      
6  "FF"      "WTB3MS"      
7  "FF"      "STLFSI"      
8  "WGS10YR" "STLFSI"      
9  "WGS10YR" "WTB3MS"      
10 "FF"      "WGS10YR"      
11 "STLFSI"  "WTB3MS"      
12 "FF"      
13 "WGS10YR"     
14 "WTB3MS"     
15 "STLFSI"             

我搜索的一些链接:remove spaces from cells in matrix R: data.frame rows to list Remove all empty elements from string array

谢谢!

【问题讨论】:

  • 你想填充什么作为空白元素?如果你有''元素,想把它改成NAis.na(combination_mat) <- combination_mat==''这不是一个明确的问题。
  • 例子:m = matrix(c("A","B","C",""),2,2) 然后做apply(m,1,function(x) x[x!=""])
  • 谢谢@Frank 美丽。一旦你“正式”回答了这个问题,我会检查你的答案。最好的问候,用户3553260

标签: r list matrix


【解决方案1】:

您不能在删除元素的同时将数据保留为矩阵/data.frame,因为矩阵的列将具有不同的长度。有几种处理方法。

方法 1:Frank 的评论)您可以将矩阵转换为列表并删除所有元素,然后像访问列表中的列一样访问列表中的元素矩阵:

m = matrix(c("A","B","C",""),2,2) 
apply(m,1,function(x) x[x!=""])

方法2:您可以保留结果的矩阵形式,但将"" 条目转换为NA,然后从以后的计算中过滤它们。

m = matrix(c("A","B","C",""),2,2) 
m[m == ""] <- NA

【讨论】:

  • 感谢发布。我的印象是 OP 想要遍历行,而不是简单地通过打印 @RHertel 来隐藏 ""
  • 我同意,@Frank ;我只是认为可能值得将这种可能性添加为评论。
  • @Frank 关于我通过lapply() 逐个循环遍历矩阵行的意图,您是完全正确的。我会评论你的 cmets Frank 和这个努力的答案。我真的很感谢大家的努力!但是,这要归功于 Frank 首先正确回答了问题。保重!
  • 在这个逻辑下@JCollerton 我会这样做!在这种情况下,弗兰克先生有机会像你一样“回答”这个问题。尽管如此,我也会检查你的答案是否正确。小心!干杯!!!
猜你喜欢
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多