如何从列中获取行值并根据不同的列值将它们组合,按“,”分隔?
How do I take row values from a column and combine them, sep by "," based on different column value?
我正在处理蛋白质组数据并测试分析软件版本之间的差异。我们想要一个 table 让我们知道蛋白质出现在哪个版本的软件中。
下面是数据的简化版table我目前有:
Version Protein.ID Protein name
1.1 A name 1
1.2 A name 1
1.1 B name 2
1.2 B name 2
我希望我的 table 看起来像这样:
Version Protein.ID Protein name
1.1, 1.2 A name 1
1.1, 1.2 B name 2
我在这里和网上找了 2 天,但找不到解决方案。
我尝试过使用传播和聚合,但都没有用。我要么得到大量的列,要么得到一个缺少我想要的信息的列。我尝试使用一些基本的 R 命令,如粘贴,但无法删除重复值。
我尝试过的例子:
allver.mergeVerID <- spread(allver.ids, Protein.ID, Ver.ID.Porder)
Error: Each row of output must be identified by a unique combination of keys.
Keys are shared for 5311 rows:
我在使用
时也遇到了这个错误
allver.mergeVerID <- allver.ids %>% group_by(Protein.ID) %>%
summarise(Ver.ID.Porder= toString(Ver.ID.Porder), )
或
allver.mergeVerID <- aggregate(Ver.ID.Porder ~ Protein.ID, allver.ids, toString)
这个错误是什么意思?
这是一种方法。按 'Protein.ID' 分组后,summarise
'Version' 通过 paste
将元素组合在一起
library(dplyr)
df1 %>%
group_by(Protein.ID, `Protein name`) %>%
summarise(Version = toString(Version))
或 aggregate
来自 base R
aggregate(Version ~ Protein.ID + `Protein name`, df1, toString)
# Protein.ID Protein name Version
#1 A name 1 1.1, 1.2
#2 B name 2 1.1, 1.2
注意:两种解决方案都符合预期输出
数据
df1 <- data.frame(Version = c(1.1, 1.2, 1.1, 1.2),
Protein.ID = c('A', 'A', 'B', 'B'), `Protein name` = c('name 1',
'name 1', 'name 2', 'name 2'), check.names = FALSE, stringsAsFactors = FALSE)
我正在处理蛋白质组数据并测试分析软件版本之间的差异。我们想要一个 table 让我们知道蛋白质出现在哪个版本的软件中。
下面是数据的简化版table我目前有:
Version Protein.ID Protein name
1.1 A name 1
1.2 A name 1
1.1 B name 2
1.2 B name 2
我希望我的 table 看起来像这样:
Version Protein.ID Protein name
1.1, 1.2 A name 1
1.1, 1.2 B name 2
我在这里和网上找了 2 天,但找不到解决方案。
我尝试过使用传播和聚合,但都没有用。我要么得到大量的列,要么得到一个缺少我想要的信息的列。我尝试使用一些基本的 R 命令,如粘贴,但无法删除重复值。
我尝试过的例子:
allver.mergeVerID <- spread(allver.ids, Protein.ID, Ver.ID.Porder)
Error: Each row of output must be identified by a unique combination of keys.
Keys are shared for 5311 rows:
我在使用
时也遇到了这个错误allver.mergeVerID <- allver.ids %>% group_by(Protein.ID) %>%
summarise(Ver.ID.Porder= toString(Ver.ID.Porder), )
或
allver.mergeVerID <- aggregate(Ver.ID.Porder ~ Protein.ID, allver.ids, toString)
这个错误是什么意思?
这是一种方法。按 'Protein.ID' 分组后,summarise
'Version' 通过 paste
将元素组合在一起
library(dplyr)
df1 %>%
group_by(Protein.ID, `Protein name`) %>%
summarise(Version = toString(Version))
或 aggregate
来自 base R
aggregate(Version ~ Protein.ID + `Protein name`, df1, toString)
# Protein.ID Protein name Version
#1 A name 1 1.1, 1.2
#2 B name 2 1.1, 1.2
注意:两种解决方案都符合预期输出
数据
df1 <- data.frame(Version = c(1.1, 1.2, 1.1, 1.2),
Protein.ID = c('A', 'A', 'B', 'B'), `Protein name` = c('name 1',
'name 1', 'name 2', 'name 2'), check.names = FALSE, stringsAsFactors = FALSE)