R 如何使用if创建df列
我有一个df:R 如何使用if创建df列,r,R,我有一个df: a<-c('TSPAN6','DPM1','SCYL3') b<-c(0.1,0.001,0.0002) c<-c(0.01,0.01,0.001) d<-c(-0.5,1.3,-1.7) df<-data.frame(a,b,c,d) names(df)<- c('gene', 'p-val','padj','lfc') a您可以在中使用来操作数据帧的变量,而无需始终使用df$来引用它。在括号[中,您创建了一个逻辑子集(例如尝试df$p.v
a<-c('TSPAN6','DPM1','SCYL3')
b<-c(0.1,0.001,0.0002)
c<-c(0.01,0.01,0.001)
d<-c(-0.5,1.3,-1.7)
df<-data.frame(a,b,c,d)
names(df)<- c('gene', 'p-val','padj','lfc')
a您可以在
中使用来操作数据帧的变量,而无需始终使用df$
来引用它。在括号[
中,您创建了一个逻辑子集(例如尝试df$p.val<0.01
),总共只有TRUE
成为向量的子集(位于[
之前,例如new[…]
)。通过赋值不会回答您的问题,但您应该将p-val
更改为名称,-
在您的示例中用作数学运算符。您到底想要实现什么?是否要检查列上是否有较小的值,这可以通过使用any(df$p-val<0.01)实现
。您要做的是检查列的每个值是否小于0.01,这将返回一个向量,每个结果if([False-True-True])
,这没有意义,所以我只使用第一个值。这很好!我没有再看到“in”了。非常感谢
if (df$p-val < 0.01){
df$new == 'black'
} else if (df$p-val<0.01 & df$padj < 0.01 & df$lfc<0) {
df$new == 'blue'
} else if (df$p-val < 0.01 & df$padj < 0.01 & df$lfc > 0) {
df$new =='red'
} else {
df$new =='grey'
}
df <- within(df, {
new <- "grey"
new[p.val < 0.01] <- "black"
new[p.val < 0.01 & padj < 0.01 & lfc > 0] <- "blue"
new[p.val < 0.01 & padj < 0.01 & lfc > 0] <- "red"
})
df
# gene p.val padj lfc new
# 1 TSPAN6 1e-01 0.010 -0.5 grey
# 2 DPM1 1e-03 0.010 1.3 black
# 3 SCYL3 2e-04 0.001 -1.7 black
df <- structure(list(gene = structure(c(3L, 1L, 2L), .Label = c("DPM1",
"SCYL3", "TSPAN6"), class = "factor"), p.val = c(0.1, 0.001,
2e-04), padj = c(0.01, 0.01, 0.001), lfc = c(-0.5, 1.3, -1.7)), class = "data.frame", row.names = c(NA,
-3L))