我有一个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"
....
这是一个列表,其中每个成员都有两个元素。我如何只访问第二个元素?有没有办法让这个语法更紧凑?
答案 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]
将访问第二个元素。