【问题标题】:Create a list based on pattern in string vector根据字符串向量中的模式创建列表
【发布时间】:2019-07-10 11:15:36
【问题描述】:

我正在尝试按位置生成包含信息的列表。目前,我有一个带字符串的字符向量。其中有位置,信息,信息,信息,位置2,信息,信息,信息结构。我想要一个列表,其中每个元素都是 location1:信息、信息信息等。

我试图创建一个循环来识别数据中的位置,但是我不明白如何将信息与位置动态连接在一起(位置和信息的数量正在变化,所以我需要动态的解决方案)。

list_of_locations = list()
locations = c("location1","location2")
original_vector = c("location1","July 123","August 345", "September 678", "location2","July 123","August 345")

for (word in original_vector){
  if(word %in% locations){
    list_of_locations[[word]] = word 
  } else {
    list_of_locations[[word]] = word
  }
}

我正在寻找一份清单:

1: location1, July 123, August 345, September 678
2: location2, July 123, August 345...

【问题讨论】:

    标签: r


    【解决方案1】:

    不是一种有用的数据格式,但你在这里:

    split(original_vector, 
      cumsum(
        grepl("location", original_vector, fixed = TRUE) #search for the word "location"
      )
    )
    #$`1`
    #[1] "location1"     "July 123"      "August 345"    "September 678"
    #
    #$`2`
    #[1] "location2"  "July 123"   "August 345"
    

    或者(感谢@Ronak)如果你有位置向量:

    split(original_vector, cumsum(original_vector %in% locations)
    

    如果您的数据实际上是所描述的格式(1 个位置,3 个信息条目),我会将 original_vector 转换为矩阵:

    original_vector = c("location1","July 123","August 345", "September 678", "location2","July 123","August 345", "September 678")
    t(matrix(original_vector, 4))
    #     [,1]        [,2]       [,3]         [,4]           
    #[1,] "location1" "July 123" "August 345" "September 678"
    #[2,] "location2" "July 123" "August 345" "September 678"
    

    这种格式便于子集和其他数据处理。

    【讨论】:

    • 确实适用于我在此处提供的示例数据,但事实是在上面的“位置”向量中捕获的位置数据具有不同的名称(即纽约、洛杉矶、纽瓦克等) .应该对此更具体。
    • 感谢您的快速回复。这解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多