r语言 - 如何拆分由 ";" 分隔的列元素并保持其频率值



我有一个具有这种结构的数据帧;

df1 <- data.frame(
gene = c("Gen1", "Gen2;Gen3", "Gen4"),
freq = c(7, 21 , 51))

我想要某种方法来拆分 Gene2 和 Gene3,但保留它们的频率值,以便最终结果看起来像 df2

df2 <- data.frame(
gene = c("Gen1", "Gen2", "Gen3", "Gen4"),
freq = c(7, 21, 21 , 51))

您可以在 df1$gene 上使用strsplit";"。然后unlist结果并用lengths(x)重复该元素。

x <- strsplit(df1$gene, ";")
df2 <- data.frame(gene=unlist(x), freq = df1$freq[rep(seq_len(nrow(df1)),
lengths(x))])
df2
#  gene freq
#1 Gen1    7
#2 Gen2   21
#3 Gen3   21
#4 Gen4   51

使用data.table

setDT(df1)
df1[, .(gene = unlist(strsplit(gene, ";")),  freq), by = 1:nrow(df1)
][, !"nrow"]
#    gene freq
# 1: Gen1    7
# 2: Gen2   21
# 3: Gen3   21
# 4: Gen4   51

最新更新