Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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 如何使用if创建df列_R - Fatal编程技术网

R 如何使用if创建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

我有一个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.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))