簡體   English   中英

重塑 R 中的一個因素

[英]Reshaping a Factor in R

我有以下字符串:

str(seqN)  
chr [1:704] "010000100100001010000100010001000100000100101000010001001000001001001000001000010010000100100100010000101000010"| __truncated__ ...

是的,它們是由 0 和 1 組成的非常長的字符串(704 個長度為 1000 的字符串)。 它們是一個已經單熱編碼的序列。

因為我想把它提供給一個卷積模型,我需要一個特定的輸入形狀,所以我想將每個字符串分成長度為 4 的子組(以匹配單熱編碼)。

問題是 R 不允許我拆分該字符串,就好像該字符串不可拆分一樣。

例如,如果我執行此代碼:

seqN2 <- array_reshape(seqN,c(704,250,4))

它給了我這個錯誤:

py_call_impl(callable, dots$args, dots$keywords) 中的錯誤:
ValueError:無法將大小為 704 的數組重塑為形狀 (704,250,4)

我應該怎么做才能達到我需要的形狀(704,250,4)?

我們可以使用來自base R strsplit

lst1 <- strsplit(seqN, "(?<=.{4})", perl = TRUE)

輸出將是一個vector list 不確定轉換為數字。 或許

lst2 <- lapply(lst1, strtoi, base = 2)

或者如評論中提到的 OP,它只是轉換為整數

lst2 <- lapply(lst1, as.integer)

如果它們的長度相同,也可以通過rbindlist元素轉換為matrix

out <- do.call(rbind, lst2)

這是一種簡單的方法,您可以將長字符串拆分為長度為 4 的子字符串。只需根據需要調整變量n

mystring <- "110010101101"
n <- 2 # n <- nchar(mystring) / 4 -1

sapply(1 + 4*0:n, function(z) substr(mychar, z, z+3))
[1] "1100" "1010" "1101"

您可以stringr提取最多 4 個字符的所有序列:

library(stringr)
str_extract_all(seqN, ".{1,4}", simplify = T)[1,]
 [1] "0100" "0010" "0100" "0010" "1000" "0100" "0100" "0100" "0100" "0001" "0010" "1000" "0100" "0100" "1000" "0010" "0100" "1000" "0010"
[20] "0001" "0010" "0001" "0010" "0100" "0100" "0010" "1000" "010" 

暫無
暫無

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

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