数据透视表excel或R.

时间:2015-11-19 19:05:06

标签: r excel pivot-table

我的数据在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

我有数百个基因,所以我需要一种自动化的方法来获得这些数据。谢谢你。

2 个答案:

答案 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