我正在處理基因組資料,并希望安排這些行,以使特定的基因(例如b)出現在整個列中。我是R編程的新手,沒有找到一種方法來安排上述資料。
我的資料的一個例子是:
c1 c2 c3 c4
1 x b
2 y d a b
3 x a b e
現在,我想把所有的b單獨放在一列,其余的也相應地對齊。我想把它整理成這樣,所有的b都對齊:
c1 c2 c3 c4 c5
1 NA NA x b NA
2 y d a b NA
3 NA x a b e
有人能幫助我嗎?
uj5u.com熱心網友回復:
也許這個可以
library(dplyr)
library(tidyr)
library(stringr)
df1 %> %
unite(new, everything()。 sep="", na. rm =TRUE) %>%
提取(new, 進入= str_c('c, 3。 5), " (. *)(b)(.*)") %>%
mutate(c3 =str_pad(c3, 寬度= max(nchar(c3))) %> %
分離(c3, 進入= str_c('c, 1。 3), "(? <=。)(?<=。)") %>%
mutate(across(everything)。 ~ na_if(trimws(. ), "")))
輸出
c1 c2 c3 c4 c5
1 <NA> < NA> x b <NA>
2 y d a b <NA>
3 <NA> x a b e
data
df1 < -結構(list(c1 = c("x"。 "y"。 "x")。 c2 = c("b"/span>。 "d", "a"),
c3 = c(NA。 "a", "b")。 c4 = c(NA。 "b"。 "e")),
class = "data.frame", 行。 names = c("1",/span>
"2", "3"))
uj5u.com熱心網友回復:
這很亂,但它可能適用于不同的資料,每行只包含一個b。
loc <- c()
附加 <- c()
for (i in 1: nrow(dat)){
vec <- dat[i,]
x <- which(vec == "b")
y <- sum(! is。 na(vec)) -其中(vec[! 是。 na(vec)。 標點符號">] == "b")
loc <- c(loc, x)
附加< - c(additional, max(Y, 0))
}
loc.max <- max(loc)
add.max <- max(additional)
n <- loc.max add.max
res <- c()
for (i in 1: nrow(dat)){
vec < -unname(unlist(dat[i, ]))
x <- which(vec == "b")
y <- sum(! is。 na(vec)) -其中(vec[! 是。 na(vec)。 標點符號">] == "b")
添加 < - max(y,0)
rowvec < - c(rep(NA。 loc. max - x), vec[/span>! 是。 na(vec)】。 rep(NA, 添加。 max - add))。
print(add)
print(rowvec)
res <- rbind(res, rowvec)
}
coln <- sapply(c(1。 5)。 function(x) paste0("c", x))
res <- as.data.frame(res, row。 names = FALSE)。
colnames(res) <- coln
c1 c2 c3 c4 c5
1 <NA> < NA> x b <NA>
2 y d a b <NA>/span>
3 <NA> x a b e
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/310869.html
標籤:
