【问题标题】:How can I extract a range of rows from in a matrix finding specific characters?如何从矩阵中提取一系列行以查找特定字符?
【发布时间】:2017-10-22 16:16:23
【问题描述】:

如果我有这种类型的矩阵:

V1...................V2
"Mateo"..............1
"Marcos".............2 
"Lucas"..............3
"Juan"...............4
"Felipe".............5
"Federicus"..........6

这个想法是使用列 V1 创建一个相同类型的新矩阵,例如从第二行到第四行提取:

If V1= "Marcos" & V1="Felipe"

然后显示从 Marcos 到 Felipe:

V1...................V2
"Marcos".............2 
"Lucas"..............3
"Juan"...............4
"Felipe".............5

【问题讨论】:

  • 使用which 查找范围并使用seq 获取序列。像这样的东西应该可以工作i1 <- with(df1, match(c("Marcos", "Felipe"), V1)); df1[i1[1]:i1[2],]。我假设它是一个 data.frame

标签: r matrix extract


【解决方案1】:

V1 中有一个名字不止一次时,match 将只返回第一个值。但它应该返回所有。另请参阅最终答案中的改编示例。您可以使用whichrange 解决它。

与:

r <- which(df$V1 %in% c("Marcos","Felipe"))
df[Reduce(':', range(r)),]

你得到:

      V1 V2
2 Marcos  2
3  Lucas  3
4 Felipe  5
5   Juan  4
6 Felipe  5

改编的例子:

df <- read.table(text="Mateo 1
Marcos 2 
Lucas 3
Felipe 5
Juan 4
Felipe 5
Federicus 6", header=FALSE)

【讨论】:

    【解决方案2】:

    我们可以使用match获取索引,然后使用:获取序列

    i1 <- with(df1, match(c("Marcos", "Felipe"), V1))
    df1[i1[1]:i1[2],]
    #      V1 V2
    #2 Marcos  2
    #3  Lucas  3
    #4   Juan  4
    #5 Felipe  5
    

    这里假设没有重复的名称。此外,%in% 是非特定的,因为它不区分名称。

    【讨论】:

    • 如果"Felipe" 出现在"Marcos" 之前怎么办?
    • @RuiBarradas 然后,匹配向量将被翻转
    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多