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)
我有一个包含 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)