Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较R中分组的重复行_R_Dataframe_Data.table - Fatal编程技术网

如何比较R中分组的重复行

如何比较R中分组的重复行,r,dataframe,data.table,R,Dataframe,Data.table,我有一个数据集,其中样本/基因通过匹配ID进行分组。我试图比较匹配ID的组 例如,我有: ID Gene Score 1:10 Gene1 0.8 1:10 Gene1 0.78 1:10 Gene4 0.6 2:20 Gene5 0.1 2:20 Gene6 0.7 3:30 Gene7 0.4 3:30 Gene8 0.6 3:30 Gene8 0.5 我试图找到各种统计数据

我有一个数据集,其中样本/基因通过匹配ID进行分组。我试图比较匹配ID的组

例如,我有:

ID      Gene    Score
1:10    Gene1    0.8
1:10    Gene1    0.78
1:10    Gene4    0.6
2:20    Gene5    0.1
2:20    Gene6    0.7
3:30    Gene7    0.4
3:30    Gene8    0.6  
3:30    Gene8    0.5
我试图找到各种统计数据,比如组中超过1个基因得分>0.7的匹配ID组的百分比(从我的示例数据来看,这将是33.3%的匹配ID组具有该得分),或者有多少组在相同的匹配ID下有0.7分的基因和0.1分的基因(本例中33.3%的组)

我一直在尝试使用
duplicated()
filter()
来启动此功能,但除此之外,我不确定要尝试哪些函数,请提供有关要尝试的函数的任何建议

输入数据:

structure(list(ID = c("1:10", "1:10", "1:10", "2:20", "2:20", 
"3:30", "3:30", "3:30"), Gene = c("Gene1", "Gene1", "Gene4", 
"Gene5", "Gene6", "Gene7", "Gene8", "Gene8"), Score = c(0.8, 
0.78, 0.6, 0.1, 0.7, 0.4, 0.6, 0.5)), row.names = c(NA, -8L), class = c("data.table", 
"data.frame"))
库(“dplyr”)
df 0.7

df%>%
分组依据(ID)%>%
汇总(cond=总和(分数>0.7)>1)%>%
替换_na(列表(cond=FALSE))%>%
汇总(分数=总和(cond)/n()
#一个tibble:1x1
压裂
1 0.333
ID组至少有一个基因得分为0.7,至少有一个基因得分为0.1

df %>%
  group_by(ID, Gene) %>%
  summarize(cond = any(Score %in% c(0.1, 0.7))) %>%
  replace_na(list(cond = FALSE)) %>%
  group_by(ID) %>%
  summarize(cond = any(cond)) %>%
  summarize(frac = sum(cond) / n())

# A tibble: 1 x 1
   frac
  <dbl>
1 0.333
df%>%
分组依据(ID,基因)%>%
总结(cond=any(分数%c(0.1,0.7))%>%
替换_na(列表(cond=FALSE))%>%
分组依据(ID)%>%
汇总(cond=any(cond))%>%
汇总(分数=总和(cond)/n()
#一个tibble:1x1
压裂
1 0.333
库(“dplyr”)
df 0.7

df%>%
分组依据(ID)%>%
汇总(cond=总和(分数>0.7)>1)%>%
替换_na(列表(cond=FALSE))%>%
汇总(分数=总和(cond)/n()
#一个tibble:1x1
压裂
1 0.333
ID组至少有一个基因得分为0.7,至少有一个基因得分为0.1

df %>%
  group_by(ID, Gene) %>%
  summarize(cond = any(Score %in% c(0.1, 0.7))) %>%
  replace_na(list(cond = FALSE)) %>%
  group_by(ID) %>%
  summarize(cond = any(cond)) %>%
  summarize(frac = sum(cond) / n())

# A tibble: 1 x 1
   frac
  <dbl>
1 0.333
df%>%
分组依据(ID,基因)%>%
总结(cond=any(分数%c(0.1,0.7))%>%
替换_na(列表(cond=FALSE))%>%
分组依据(ID)%>%
汇总(cond=any(cond))%>%
汇总(分数=总和(cond)/n()
#一个tibble:1x1
压裂
1 0.333

为了完整起见,并且因为问题有
数据。表
标签:

ds[, any(Score > 0.7), by = .(ID)][, sum(V1)/length(V1)]

为了验证结果是否正确,我们可以在链接的
数据中集成
print()
语句。表
表达式:

ds[, any(Score > 0.7), by = .(ID)][, print(.SD)][, sum(V1)/length(V1)]
资料
库(data.table)

ds为了完整性,并且因为问题有一个
数据。表
标签:

ds[, any(Score > 0.7), by = .(ID)][, sum(V1)/length(V1)]

为了验证结果是否正确,我们可以在链接的
数据中集成
print()
语句。表
表达式:

ds[, any(Score > 0.7), by = .(ID)][, print(.SD)][, sum(V1)/length(V1)]
资料
库(data.table)

ds谢谢,这看起来非常清晰,对我来说也很容易使用。我已经在我的真实数据上尝试过了,它返回的结果都是NA,并且有一条消息:
summary()`ungroup output(用`groups`参数覆盖)
-我还需要为我的真实数据做些什么吗?与示例数据相比,你的真实数据看起来是什么样的?列中的一些行是NA,没有分数,这是唯一的区别,除了构成数据集的另外两列之外,管理解决了我的NAs问题,现在可以了-谢谢你的回复谢谢你,thi对我来说,s看起来非常清晰且易于使用。我已经在实际数据上尝试过它,但它返回的结果都是NA,并且有一条消息:
summary()`解组输出(用`.groups`参数覆盖)
-对于我的真实数据,我还需要做些什么吗?与示例数据相比,您的真实数据看起来是什么样的?列中的某些行是NA,没有分数,这是唯一的区别,除了组成数据集的另外两个列管理解决了我的NAs问题,现在可以了-感谢您的回复
ds[, any(Score %in% c(0.1, 0.7)), by = .(ID)][, sum(V1)/length(V1)]
[1] 0.3333333
ds[, any(Score > 0.7), by = .(ID)][, print(.SD)][, sum(V1)/length(V1)]
     ID    V1
1: 1:10  TRUE
2: 2:20 FALSE
3: 3:30 FALSE
[1] 0.3333333
library(data.table)
ds <- structure(list(ID = c("1:10", "1:10", "1:10", "2:20", "2:20", 
"3:30", "3:30", "3:30"), Gene = c("Gene1", "Gene1", "Gene4", 
"Gene5", "Gene6", "Gene7", "Gene8", "Gene8"), Score = c(0.8, 
0.78, 0.6, 0.1, 0.7, 0.4, 0.6, 0.5)), row.names = c(NA, -8L), class = c("data.table", 
"data.frame"))