Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何拆分由“分隔”分隔的列的元素&引用;并保持其频率值_R_Dataframe - Fatal编程技术网

R 如何拆分由“分隔”分隔的列的元素&引用;并保持其频率值

R 如何拆分由“分隔”分隔的列的元素&引用;并保持其频率值,r,dataframe,R,Dataframe,我有一个具有这种结构的data.frame df1 <- data.frame( gene = c("Gen1", "Gen2;Gen3", "Gen4"), freq = c(7, 21 , 51)) df1您可以在df1$gene上使用strsplit和“;”。然后取消列出结果,并以长度(x)重复freq中的元素 x使用数据。表: setDT(df1) df1[, .(gene = unlist(strsplit(gene, ";")), freq), by = 1:nro

我有一个具有这种结构的data.frame

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

df1您可以在df1$gene上使用
strsplit
“;”
。然后
取消列出
结果,并以
长度(x)
重复freq中的元素


x使用
数据。表

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

使用
tidyr
您可以执行:
分离_行(df1,gene,sep=';')
或查看其他选项。这确实解决了de问题,非常感谢
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
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