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

How to use strsplit() to access elements in an R list?

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

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

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"
....

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

这是将 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)
}

这将读取该向量并将其解析为文本文件,因此您可以只使用第二个 "column"

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

一种类似于@GavinSimpson 评论中的建议的"tidyverse"方法:

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

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

将访问第二个元素。

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

==> 将访问第二个元素

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

==> 将访问第 5 个元素