我目前正在嘗試設定一個有效的演算法,如果在 R 中相似,則用周圍的數字替換 0 值。這是我的資料的復制:
ID <- c("FR01", "FR02", "FR03", "FR04")
String <- c("0000001000100100100100220002000200020011", "0222000000001000010101110020020002002022", "0000000000001000010101110020020002002022", "2002220002200202010002222222222222222222")
df <- data.frame(ID, String)
#Results:
result<-df %>% mutate(String=c("1111111111111111111100222222222222220011","2222000000001111111111110022222222222222","1111111111111111111111110022222222222222","2222222222222222010002222222222222222222"))
| ID | 細繩 |
|---|---|
| FR01 | 0000001000100100100100220002000200020011 |
| FR02 | 0222000000001000010101110020020002002022 |
| FR03 | 0000000000001000010101110020020002002022 |
| FR04 | 2002220002200202010002222222222222222222 |
兩種方式的替換條件:
- 如果相鄰數字為 0,則檢查下一個數字
- 如果兩個相鄰的數字相同,則替換為該數字
- 如果相鄰數字不同,則保留 0,除了檔案的開頭和結尾只需要 1 個相鄰數字
需要的結果
| ID | 細繩 |
|---|---|
| FR01 | 1111111111111111111100222222222222220011 |
| FR02 | 2222000000001111111111110022222222222222 |
| FR03 | 1111111111111111111111110022222222222222 |
| FR04 | 2222222222222222010002222222222222222222 |
任何人都知道如何有效地構建演算法來更改這些字串數字?
謝謝你的幫助
uj5u.com熱心網友回復:
這是一些快速的事情:
foo = \(x) {
y = unlist(strsplit(x, ""))
ny = length(y)
z = gregexpr("0 ", x)[[1L]]
if (z[1L] == -1L) return(x)
for (i in seq_along(z)) {
ml = attr(z, "match.length")[i]
if (i == 1L && ml < ny) y[1L:ml] = y[ml 1L]
else if (z[i] ml > ny) y[(ny-ml 1L):ny] = y[ny-ml]
else if (y[z[i]-1L] == y[z[i] ml]) y[z[i]:(z[i] ml)] = y[z[i] ml]
}
paste(y, collapse = "")
}
例子
df = data.frame(
ID = c("FR01", "FR02", "FR03"),
String = c(
"0000001000100100100100220002000200020010",
"0222000000001000010101110020020002002022",
"0000000000001000010101110020020002002022"
)
)
df$result = sapply(df$String, foo)
# ID String result
# 1 FR01 0000001000100100100100220002000200020010 1111111111111111111100222222222222220011
# 2 FR02 0222000000001000010101110020020002002022 2222000000001111111111110022222222222222
# 3 FR03 0000000000001000010101110020020002002022 1111111111111111111111110022222222222222
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/514360.html
標籤:r数据框表现排序
