我有一个数据框(tab-sep),其中包含相同的计数和子ID。 我想结合所有相同子ID的计数。请看例子。 在:
IsomiR 185R 68G 60G 134G 124R
hsa-let-7a-3p_ATACAATCTACTGTCTTTCCT 1 6 1 2 2
hsa-let-7a-3p_ATATACAATCTACTGTCTTT 1 0 1 1 4
hsa-let-7a-3p_ATATACAATCTACTGTCTTTC 4 5 2 12 4
hsa-let-7b-3p_ATATACAATCTACTGTCTTTCC 7 5 2 6 3
hsa-let-7b-3p_ATATACAATCTACTGTCTTTCT 15 6 14 49 32
hsa-let-7b-3p_CCATACAATCTACTGTCTTTCT 4 1 1 0 0
hsa-let-7b-3p_CTATACAATCTACTGTCTT 2 2 1 2 3
hsa-let-7c-3p_CTATACAATCTACTGTCTTT 29 7 26 21 19
hsa-let-7c-3p_CTATACAATCTACTGTCTTTC 85 24 73 109 59
hsa-let-7c-3p_CTATACAATCTACTGTCTTTCA 11 3 7 8 3
出:
IsomiR 185R 68G 60G 134G 124R
hsa-let-7a-3p 6 11 4 15 10
hsa-let-7b-3p 28 .. .. .. ..
hsa-let-7c-3p ..
答案 0 :(得分:2)
我们可以将从_
开始的子字符串匹配到' IsomiR'中的字符串末尾(.*$
)。列,并使用''
替换为sub
。我们使用它作为分组变量。如果我们使用dplyr
执行此操作,summarise_each
可用于sum
ming多列。
library(dplyr)
df1 %>%
group_by(IsomiR= sub('_.*$', '', IsomiR)) %>%
summarise_each(funs(sum))
# IsomiR X185R X68G X60G X134G X124R
#1 hsa-let-7a-3p 6 11 4 15 10
#2 hsa-let-7b-3p 28 14 18 57 38
#3 hsa-let-7c-3p 125 34 106 138 81
或者,我们可以使用separate
中的tidyr
{I}分割' IsomiR'通过指定sep='_'
列,将其用作分组变量,并在summarise_each
select
中使用matches
library(tidyr)
separate(df1, IsomiR, into=c('IsomiR', 'unWanted'), sep='_') %>%
group_by(IsomiR) %>%
summarise_each(funs(sum), matches('[0-9]+[A-Z]$'))
setDT(df1)
使用data.table,我们转换了' data.frame'到' data.table' (sub
)。删除' IsomiR'中的子字符串。使用lapply(.SD, ..)
,将其用作分组变量,遍历列(sum
)并获取library(data.table)
setDT(df1)[, lapply(.SD, sum), by = .(IsomiR = sub('_.*', '', IsomiR))]
(在评论中由@David Arenburg建议)。
aggregate
或另一个选项是我们baseR
原始数据集列' IsomiR`之后的transform
aggregate(.~IsomiR, transform(df1, IsomiR= sub('_.*', '', IsomiR)), sum)
中的公式方法。
df1 <- structure(list(IsomiR = c("hsa-let-7a-3p_ATACAATCTACTGTCTTTCCT",
"hsa-let-7a-3p_ATATACAATCTACTGTCTTT",
"hsa-let-7a-3p_ATATACAATCTACTGTCTTTC",
"hsa-let-7b-3p_ATATACAATCTACTGTCTTTCC",
"hsa-let-7b-3p_ATATACAATCTACTGTCTTTCT",
"hsa-let-7b-3p_CCATACAATCTACTGTCTTTCT", "hsa-let-7b-3p_CTATACAATCTACTGTCTT",
"hsa-let-7c-3p_CTATACAATCTACTGTCTTT", "hsa-let-7c-3p_CTATACAATCTACTGTCTTTC",
"hsa-let-7c-3p_CTATACAATCTACTGTCTTTCA"), X185R = c(1L, 1L, 4L,
7L, 15L, 4L, 2L, 29L, 85L, 11L), X68G = c(6L, 0L, 5L, 5L, 6L,
1L, 2L, 7L, 24L, 3L), X60G = c(1L, 1L, 2L, 2L, 14L, 1L, 1L, 26L,
73L, 7L), X134G = c(2L, 1L, 12L, 6L, 49L, 0L, 2L, 21L, 109L,
8L), X124R = c(2L, 4L, 4L, 3L, 32L, 0L, 3L, 19L, 59L, 3L)),
.Names = c("IsomiR",
"X185R", "X68G", "X60G", "X134G", "X124R"), class = "data.frame",
row.names = c(NA, -10L))
XmlTextReader reader = new XmlTextReader ("books.xml");
while (reader.Read())
{
// Do some work here on the data.
ddl.Items.Add(new ListItem(reader.Name, reader.Name));
}