簡體   English   中英

拆分字符串、標記子字符串並將標記轉換為數字向量

[英]Split a string, tokenize substrings, and convert tokens to numeric vectors

我有一個字符串:

String <- "268.1,271.1,280.9,294.7,285.6,288.6,384.4\n124.8,124.2,116.2,117.7,118.3,122.0,168.3\n18,18,18,18,18,18,18"

我想根據\n將它分成三個子字符串。

我使用以下代碼做到了這一點:

strsplit(String, "\n")

它產生了三個子字符串。

  1. 如何獲得三個獨立的存在以便我可以使用每個向量進行計算?

  2. 如何標記子字符串以創建數值向量?

這是一種使用基礎 R 的方法。 strsplit有點棘手,因為它返回一個列表並且也不適用於列表。

  1. 正如您在問題中建議的那樣,將strsplitsplit = "\n"一起使用以拆分為 3 個字符串的列表。

  2. 使用unlist將該列表更改為 3 個字符串的向量。

  3. 再次使用strsplitsplit = ","創建一個包含 3 個字符向量的列表

  4. 使用lapply將這些字符向量轉換為數值向量。

lapply(strsplit(unlist(strsplit(String,"\n")),","),as.numeric)
[[1]]
[1] 268.1 271.1 280.9 294.7 285.6 288.6 384.4

[[2]]
[1] 124.8 124.2 116.2 117.7 118.3 122.0 168.3

[[3]]
[1] 18 18 18 18 18 18 18

我們可以使用scan \n處拆分“字符串”后,遍歷listscan字符串以將其作為vector讀取

lapply(strsplit(String, "\n")[[1]], function(x) 
       scan(text = x, what = numeric(), sep=","))

或使用read.table (如最初所示)

read.table(text = String, sep=",")

如果元素數量不相等,請使用fill = TRUE

 read.table(text = String, sep=",", fill = TRUE)

原答案:

read.table(text = String, sep=",")
#    V1    V2    V3    V4    V5    V6    V7
#1 268.1 271.1 280.9 294.7 285.6 288.6 384.4
#2 124.8 124.2 116.2 117.7 118.3 122.0 168.3
#3  18.0  18.0  18.0  18.0  18.0  18.0  18.0
String<- "268.1,271.1,280.9,294.7,285.6,288.6,384.4\n124.8,124.2,116.2,117.7,118.3,122.0,168.3\n18,18,18,18,18,18,18"
   
string_vector <- unlist(strsplit(String, "\n"))

unlist(lapply(strsplit(string_vector, ','),as.numeric))

Output

 [1] 268.1 271.1 280.9 294.7 285.6 288.6 384.4 124.8 124.2 116.2 117.7 118.3 122.0 168.3  18.0  18.0  18.0  18.0  18.0  18.0
[21]  18.0

我們可以使用read.tableString讀取為 dataframe ,分隔符為逗號( , ),這將自動使列數字化。

read.table(text = String, sep = ",")

#     V1    V2    V3    V4    V5    V6    V7
#1 268.1 271.1 280.9 294.7 285.6 288.6 384.4
#2 124.8 124.2 116.2 117.7 118.3 122.0 168.3
#3  18.0  18.0  18.0  18.0  18.0  18.0  18.0

然后我們可以使用asplit來拆分每一行的數據:

asplit(read.table(text = String, sep = ","), 1)

#[[1]]
#   V1    V2    V3    V4    V5    V6    V7 
#268.1 271.1 280.9 294.7 285.6 288.6 384.4 

#[[2]]
#   V1    V2    V3    V4    V5    V6    V7 
#124.8 124.2 116.2 117.7 118.3 122.0 168.3 

#[[3]]
#V1 V2 V3 V4 V5 V6 V7 
#18 18 18 18 18 18 18 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM