首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用R中的样本ID创建样本类型值差异的数据框架?

如何用R中的样本ID创建样本类型值差异的数据框架?
EN

Stack Overflow用户
提问于 2020-10-10 00:02:08
回答 1查看 32关注 0票数 0

我想要为每个样本ID创建两种类型的样本之间的值差异的数据框架,问题是有些样本ID不具有这两种样本类型。我想我正在寻找一个for循环/条件语句,但是我没有成功地创建一个

我在下面创建了一些示例数据:

代码语言:javascript
复制
ID <- c(1,3,3,4,6,6,7,7,8,8)
Type <- c('soil', 'soil', 'water','soil','soil', 'water','soil', 'water','soil', 'water')
data1 <- as.data.frame(cbind(ID, Type))
data1$value <- runif(length(data1$ID), min=0, max=1)
head(data1)

结束结果将为每个具有两种样本类型的样本ID提供差异(水-土壤)的数据框架。只有一种数据类型的示例ID将被记录为NA。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-10 00:08:26

您可以使用if/elsedplyr中尝试条件检查:

代码语言:javascript
复制
library(dplyr)

data1 %>%
  group_by(ID) %>%
  summarise(diff = if(n_distinct(Type) == 1) NA else 
                      value[Type == 'water'] - value[Type == 'soil'])

如果NA中有一个唯一值,则返回Type,否则返回两者之间的差异。

不使用if/else的诀窍是将差异子集,因此当没有值时,它会自动返回NA

代码语言:javascript
复制
data1 %>%
  group_by(ID) %>%
  summarise(diff = (value[Type == 'water'] - value[Type == 'soil'])[1])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64288694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档