我试图以有效的方式将我的复制品从我的数据集中的结果中分离出来。我以此数据为例:
x <- data.frame(sample = c("AA", "AA", "BB", "BB", "CC", "CC"),
Gene = c("HSA-let1","HSA-let1","HSA-let1","HSA-let1","HSA-let1","HSA-let1"),
Cq = c(14.55, 14.45, 13.55, 13.45, 16.55, 16.45))
问题是两个重复项在“Sample”和“Gene”中具有相同的名称。所以当我尝试时:
spread(x,Gene,Cq)
我收到重复的标识符错误。我在下面尝试了this修复代码,它在一个coloumn中用“,”分隔了两个值。这几乎是成功的,但我希望它们分开:
x_test <- dcast(setDT(x), Gene ~ sample, value.var = 'Cq',
fun.aggregate = function(x) toString(unique(x)))
我也尝试了这个this tidyr解决方案,但我不了解足够的R来使它工作。
x_test2 <- x %>%
gather(variable, value, -(Gene:Cq)) %>%
unite(temp, Cq, variable) %>%
spread(temp, value)
我希望我的数据集看起来像这样:
# Gene AA_1 AA_2 BB_1 BB_2 CC_1 CC_2
# HSA-let 14.55 14.45 13.55 13.45 16.55 16.45
答案 0 :(得分:2)
使样本独特,然后传播:
{{1}}
答案 1 :(得分:1)
您可以更改sample
列:
library(data.table)
setDT(x)[, sample := paste(sample, ifelse(!duplicated(sample), '1', '2'), sep = '_')]
dcast(x, ...~sample, value.var = 'Cq')
# Gene AA_1 AA_2 BB_1 BB_2 CC_1 CC_2
# 1: HSA-let1 14.55 14.45 13.55 13.45 16.55 16.45
注意:spread
应该被称为spread(x, sample, Cq)
。
如果你有不同数量的重复值(不总是2),你可以这样做:
x <- setDT(x)[order(sample),]
x[, sample := paste(sample, unlist(lapply(table(x$sample), function(x) 1:x)), sep = '_')]
dcast(x, ...~sample, value.var = 'Cq')
请注意,x
应按sample
排序。
答案 2 :(得分:0)
你可以试试这个
library(dplyr)
x %>% group_by(Gene) %>%
mutate(sample = paste(sample, seq(n()), sep = "_")) %>%
spread(sample, Cq)