我是R newby,想知道人们是否可以就如何处理我的数据提供一些建议。
我有一个数据框,其中包含基因观察到的变化样本列表(例如下面的例子)
Dataframe1:
Sample Gene Alteration
1 A -1
1 B -1
1 C -1
1 D 1
2 B 1
2 E -1 ...
我还有一个数据框,其中包含我感兴趣的基因列表(例如下面)
Dataframe2:
Gene
B
D
E
我想计算有多少样本对dataframe2中的每个基因进行-1更改,其理想输出类似于:
Dataframe3:
Gene Alteration Sum
B -1 23
D -1 2
E -1 18
我真的不知道从哪里开始,我已经找到了很多关于总和等的信息,但我不知道如何将两个数据帧一起提供并利用总和。< / p>
我可以尝试的任何建议或功能都将非常感激。
答案 0 :(得分:0)
您可以使用包plyr中的ddply函数。
library(plyr)
Dataframe3 <- ddply(Dataframe1, c('Gene', 'Alteration'), summarise, Sum = length(Alteration))
答案 1 :(得分:0)
步骤1:从dataframe1中选择感兴趣的基因:
set.seed(11)
dataframe1 = data.frame(Sample = rep(c(1,2), each = 5),
Gene = rep(c("A", "B", "C", "D","E"),2),
Alteration = sample(c(-1, 1), 10, prob = c(0.7, 0.3), replace = TRUE))
dataframe2 <- data.frame(Gene = c("B", "D", "E"))
# Select the genes of interest
dataframe1 <- dataframe1[dataframe1$Gene %in% dataframe2$Gene, ]
第2步:计算-1的总和
我们可以使用dplyr
库来计算每组的总和:
library(dplyr)
dataframe1 %>%
group_by(Gene) %>%
summarise(Sum = sum(Alteration == -1))
请注意,当我们有一个布尔向量(包含TRUE和FALSE的向量)时,此向量的总和给出了TRUE的数量。
祝你好运!答案 2 :(得分:0)
或者使用dplyr
,只需尝试
dft2 %>%
inner_join(dft1) %>%
group_by(Gene, Alteration) %>%
summarise( cnt = n()) %>%
filter(Alteration == -1)
其中dft1
是第一个数据帧,dft2
是第二个数据帧
如果dft2
在dft1
中找不到条目且您想显示空,请将inner_join
更改为left_join