R:转换数据框以显示另一列的每个唯一行的列的相应值

R: Transform dataframe to show the corresponding values of a column for each unique row of another column

我有一个包含 2 列的大型数据框:一列具有离散数量的重复出现的值,而另一列仅具有唯一值。本质上,第 2 列中的多个值将对应于第 1 列中的一个值。

由于当前已获取数据,因此它将第 2 列中的每个唯一变量列为一行,这意味着第 1 列中存在重复值。

我想转换(本质上是翻转)数据,以便我可以看到第 1 列中的每个唯一值属于第 2 列中的哪些值。

例如,df为:

重叠群 基因
C20 G1
C10 G2
C40 G3
C20 G4
C40 G5
C30 G6

我想要:

重叠群 基因
C10 G2
C20 G1、G4
C30 G6
C40 G3、G5

如果我只得到唯一值的数量也可以:

重叠群 基因
C10 1
C20 2
C30 1
C40 2

我希望这是有道理的。我一直在努力寻找合适的关键词来解释这个问题,但真的不知道从哪里开始。虽然我觉得我应该把数据变成一个列表。

要获得您第一个想要的数据框 table,您可以使用

library(tidyr)
chop(df, Gene)

如果要获得您可能使用的最后一个:

library(dplyr)
df %>% group_by(Config) %>% summarise(n = n())

您也可以使用dplyr。先按 Contig 分组,然后总结。

library(dplyr)

# Small test data
test_data <- data.frame(Contig = c("C10", "C10", "C20", "C20","C20"), 
                        Gene = c("G1", "G3", "G4", "G5", "G6"))


clean_data <- test_data %>% 
  group_by(Contig) %>% 
  summarise(number_of_genes = length(unique(Gene)), 
            specific_genes = paste0(unique(Gene), collapse = ", "))


library(plyr)
M = data.frame(
  Contig = c("C20", "C10", "C40", "C20", "C40", "C30"),
  Gene = paste0("G",1:6)
)
f = function(m) {
  data.frame(
    Contig = unique(m$Contig),
    Gene = paste(m$Gene, collapse=",")
  )
}
ddply(M, .(Contig), f)