如何使用strsplit()访问R列表中的元素?

时间:2016-09-13 22:46:20

标签: regex r list strsplit

我有一个R列表list1,其中一个字段是两个连在一起的字符串。

当我们访问field3的字段list1时,它看起来像这样

list1$field2

 [1] "stringA, stringB"    
 [2] "stringA, stringB"      
 [3] "stringA, stringB" 
 [4] "stringA, stringB" 
 [5] "stringA, stringB" 
 [6] "stringA, stringB"             
 ....

我只想访问条目" stringB",并忽略" stringA"。

如果我使用类似strsplit()的内容,我会收到以下内容:

strsplit(list1$field2, ",")
[[1]]
[1] "stringA"
[2] "stringB"
[[2]]
[1] "stringA"
[2] "stringB"
....

这是一个列表,其中每个成员都有两个元素。我如何只访问第二个元素?有没有办法让这个语法更紧凑?

4 个答案:

答案 0 :(得分:3)

A" tidyverse"与@GavinSimpson的评论中的建议相似:

library(purrr)
library(stringr)

x <- rep("stringA, stringB", 10)

str_split(x, ", ") %>% map_chr(`[`, 2)
#>  [1] "stringB" "stringB" "stringB" "stringB" "stringB" "stringB" "stringB"
#>  [8] "stringB" "stringB" "stringB"
  • str_split()的行为类似于strsplit()
  • map_chr()的行为类似lapply(),但也会将结果列表转换为字符向量。

对于您的问题,请将x替换为list1$field2

答案 1 :(得分:1)

这是一个快速将2元素字符串转换为数据帧的函数:

strToDf<-function (list){
  slist<-strsplit(list, ",")
  x<-sapply(slist, FUN= function(x) {x[1]})
  y<-sapply(slist, FUN= function(x) {x[2]})
  #x<-as.numeric(x)
  #y<-as.numeric(y)
  df<-data.frame(x=x, y=y, stringsAsFactors = FALSE)
  return(df)
}

答案 2 :(得分:1)

这将读取该向量并解析为文本文件,因此您可以采取第二个“列”

 scan(text=list1$field2, what=list("",""))[[2]]
Read 6 records
[1] "stringB" "stringB" "stringB" "stringB" "stringB" "stringB"

答案 3 :(得分:0)

strsplit(list1$field2, ",")[[1]][2]

将访问第二个元素。