我的数据在excel上看起来像这样:
var element = document.getElementById("cardtype");
element.value = localStorage.inputText || 'op1';
element.addEventListener("change", function(e) {
var selectedValue = this.value;
localStorage.inputText = selectedValue;
chrome.browserAction.setPopup({
popup: selectedValue == 'op1' ? 'popup.html' : 'popup2.html'
});
});
我想创建一个列,其中每个基因至少有一个H的个体总数。 所以,它看起来应该是这样的;
Genename ID1 ID2 ID3
Gene1 R H R
Gene1 R H R
Gene1 H R H
Gene2 H R H
Gene2 R R H
Gene2 H R R
Gene2 R R R
我有数百个基因,所以我需要一种自动化的方法来获得这些数据。谢谢你。
答案 0 :(得分:2)
试试这个
library(data.table)
data <- data.table(data)
res <- data[,list("Genename"=Genename,"Het"=rowSums(data=="H")>0)]
res <- res[,list("Het"=sum(Het)),by=Genename]
> res
# Genename Het
#1: Gene1 3
#2: Gene2 3
答案 1 :(得分:1)
我们可以按“基因名称”进行分组,获取any
值的逻辑索引,即&#39; H&#39;在每列中,获取sum
中的summarise
,然后我们使用rowSums
来获得预期的输出。
library(dplyr)
df1 %>%
group_by(Genename) %>%
summarise_each(funs(sum(any(.=='H')))) %>%
transmute(Genename= Genename, Het = rowSums(.[-1L]))
Genename Het
# (chr) (dbl)
#1 Gene1 3
#2 Gene2 2
或者正如@aosmith提到的那样distinct
是转换广泛的&#39;之后的选项。长期&#39;格式为gather
。
library(tidyr)
gather(df1, Var1, Var2, -Genename) %>%
group_by(Genename, Var1) %>%
distinct(Var2) %>%
group_by(Genename) %>%
summarise(Het= sum(Var2=='H'))
如果我们需要没有&#39; H&#39;并且至少有一个&#39; R&#39; per&#39; Genename&#39;
df1 %>%
group_by(Genename) %>%
summarise_each(funs(all(.!='H') & any(.=='R'))) %>%
transmute(Genename=Genename, Het= rowSums(.[-1L]))
# Genename Het
# (chr) (dbl)
#1 Gene1 0
#2 Gene2 1