【问题标题】:Remove rows of a Matrix in R according to a condition根据条件删除R中矩阵的行
【发布时间】:2018-10-04 21:58:26
【问题描述】:

假设您在 R 中有以下矩阵:

      [,1]   [,2] [,3] [,4] [,5]
[1,]  "A/B"    3    4    5    7
[2,]  "A/C"    8    6    7    7
[3,]  "A/B/C"  8    8    5    4

删除第一列有两个以上字母的行的最简单方法是什么?我认为理由应该是这样的:

if nchar(matrix[,1]!=3) then remove that row

但我不知道如何编码。任何帮助,将不胜感激! 谢谢

【问题讨论】:

  • 如果你的矩阵被命名为m,那么m = m[nchar(m[, 1]) <= 2, ]
  • 而且,仅供参考,矩阵只能具有一种数据类型,因此当您同时具有字符串和数字时,这是一个非常糟糕的选择。您应该改用数据框,它的每列可以有不同的数据类型。
  • mat 成为矩阵的名称。然后就做mat[nchar(mat[,1])<3,]
  • “字母”是指字符还是字母(即 A-Z)?

标签: r matrix rows


【解决方案1】:

将您的矩阵转换为数据框,然后使用grepl 检查三个或更多字母的匹配模式:

df <- df[!grepl("\\w/\\w/\\w.*", df$letters),]

Demo

上述 cmets 中的一些建议也可能对您有用,但基于正则表达式的解决方案还有一个额外的好处,即它是健壮的,并且如果您的需求在未来某个时间点发生变化,可以轻松更改。

【讨论】:

  • 这将维护行并移动所需的行。我猜你打算这样做!grepl(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多