2016-09-13 72 views
1

我有一個R列表list1,其中一個字段被製成兩個字符串連在一起。如何使用strsplit()訪問R列表中的元素?

當我們存取權限領域field3list1,它看起來像這樣

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

'lapply(strsplit(列表1場2 $ 「」),'['2)'會得到第二列表的每個組成的第二個元素你顯示(即'strsplit()'返回的列表)。 –

+0

@GavinSimpson - 'lapply(strsplit(list1 $ field2,「,」),\'[\',2)'我認爲你的意思是 - 必須在評論中逃避反引號。 – thelatemail

+1

你可以使用''[''''lapply'。不需要反引號。 –

回答

1

A 」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()一樣,但也會將結果列表轉換爲字符向量。

對於您的問題,替代xlist1$field2

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) 
} 
1

這將讀取向量和解析爲一個文本文件,所以這時可以只取第二「列通過@GavinSimpson類似的意見建議「

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