如何通过R中的样本ID创建样本类型值差异的数据框?
我想为每个样本ID创建两种样本之间的值差异的数据框。问题是一些样本ID没有两种样本类型。我想我正在寻找一个for循环/条件语句,但我还没有成功地创建一个 我在下面创建了一些示例数据:如何通过R中的样本ID创建样本类型值差异的数据框?,r,for-loop,dplyr,conditional-statements,R,For Loop,Dplyr,Conditional Statements,我想为每个样本ID创建两种样本之间的值差异的数据框。问题是一些样本ID没有两种样本类型。我想我正在寻找一个for循环/条件语句,但我还没有成功地创建一个 我在下面创建了一些示例数据: 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(I
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您可以在dplyr
中使用if
/else
尝试条件检查:
library(dplyr)
data1 %>%
group_by(ID) %>%
summarise(diff = if(n_distinct(Type) == 1) NA else
value[Type == 'water'] - value[Type == 'soil'])
如果类型中有1个唯一值,则返回NA
,否则返回两者之间的差异
不使用if
/else
的一个技巧是将差异子集,这样当没有值时,它会自动返回NA
data1 %>%
group_by(ID) %>%
summarise(diff = (value[Type == 'water'] - value[Type == 'soil'])[1])
这正是我需要的!非常感谢。