【问题标题】:Find a specific item in the list for a variable when list is dinamic当列表是动态的时,在列表中查找变量的特定项
【发布时间】:2021-06-07 23:01:14
【问题描述】:

我有变量 x(i) 的多个值(值列表)。例如 x(1):

[1] "$30 1 d"              "$250 2 d"             "$300 3 d"            
 [4] "$100 3 d"             "$10 4 d"              "$30 1 d"             
 [7] "$250 2 d"             "$300 3 d"             "$100 3 d"            
[10] "$10 4 d"              "OrganizerBoyette, FL" "Team member"  

我想在变量 X(1) 的“组织者”后面找到单词。例如这里是 Boyette, FL(组织者后的城市和州的名称)。 这里的 Organizer 是列表中的第 11 个值。也许对于变量 x(2),人 2 的另一个输出,组织者可能位于列表中的第 9 个值。你能帮我用 R 写代码来解决这个问题吗?我想为每个人找到城市和州的名称。

【问题讨论】:

  • 试试f1 <- function(x, pat) grep(pat, x, ignore.case = TRUE);f1(df1[[1]], "organizer")
  • 感谢您的回答。我收到此错误:grep 中的错误(pat,location_m,ignore.case = TRUE):找不到对象“df1”
  • 错误是:找不到对象'df1'。你能解释一下这个公式吗?能否请您告诉我解决问题的方法?
  • 谢谢,但是对于不同的 x,城市和州的名称会有所不同。我有 1300 个变量 X(1)....x(1300)。
  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example

标签: r list organizer


【解决方案1】:

也许这会有所帮助:

library(tidyverse)
library(stringr)
library(rebus)
#> 
#> Attaching package: 'rebus'
#> The following object is masked from 'package:stringr':
#> 
#>     regex
#> The following object is masked from 'package:ggplot2':
#> 
#>     alpha

#create some data
data <- map(1:5, ~  rep('abcde', .x)) 

for (i in seq_along(data)) {
    data[[i]][[i]] <- 'OrganizerBoyette, FL'
}

data
#> [[1]]
#> [1] "OrganizerBoyette, FL"
#> 
#> [[2]]
#> [1] "abcde"                "OrganizerBoyette, FL"
#> 
#> [[3]]
#> [1] "abcde"                "abcde"                "OrganizerBoyette, FL"
#> 
#> [[4]]
#> [1] "abcde"                "abcde"                "abcde"               
#> [4] "OrganizerBoyette, FL"
#> 
#> [[5]]
#> [1] "abcde"                "abcde"                "abcde"               
#> [4] "abcde"                "OrganizerBoyette, FL"

#subsetting Organizer 
map(data, ~ str_subset(.x, pattern = 'Organizer') %>%
        str_match_all('Organizer' %R% capture('.*$'))) %>% flatten() 
#> [[1]]
#>      [,1]                   [,2]         
#> [1,] "OrganizerBoyette, FL" "Boyette, FL"
#> 
#> [[2]]
#>      [,1]                   [,2]         
#> [1,] "OrganizerBoyette, FL" "Boyette, FL"
#> 
#> [[3]]
#>      [,1]                   [,2]         
#> [1,] "OrganizerBoyette, FL" "Boyette, FL"
#> 
#> [[4]]
#>      [,1]                   [,2]         
#> [1,] "OrganizerBoyette, FL" "Boyette, FL"
#> 
#> [[5]]
#>      [,1]                   [,2]         
#> [1,] "OrganizerBoyette, FL" "Boyette, FL"

map(data, ~ str_subset(.x, pattern = 'Organizer') %>%
        str_match_all('Organizer' %R% capture('.*$'))) %>% flatten() %>%
    reduce(rbind)
#>      [,1]                   [,2]         
#> [1,] "OrganizerBoyette, FL" "Boyette, FL"
#> [2,] "OrganizerBoyette, FL" "Boyette, FL"
#> [3,] "OrganizerBoyette, FL" "Boyette, FL"
#> [4,] "OrganizerBoyette, FL" "Boyette, FL"
#> [5,] "OrganizerBoyette, FL" "Boyette, FL"

reprex package (v2.0.0) 于 2021-06-07 创建

【讨论】:

  • 谢谢,但是对于不同的 x,城市和州的名称会有所不同。我有 1300 个变量 X(1),....X(1300)。例如,对于 X1,我想查找“organizerMilwaukee, WI”。对于 x2,我想找到“organizerBoyette,FL”。它们位于不同的排列中。例如对于 x1,它可能是列表中的第 5 项,但对于 x2,它可能是列表中的第 9 项。
  • 您有更多关于 X 的信息吗?它是数据框还是列表?如果 X 是一个在这里不是这样的函数,则将使用 X(1)。 class(X) 用于提取对象类。
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多