在循环(for)中使用if&else if语句进行条件格式

时间:2019-02-25 12:32:40

标签: r

我有一个52列,1290行的矩阵,其中包含我成功运行过的循环的p值和系数。

在这种情况下,我想根据关联的p值(第19列),通过在系数值的末尾附加星号来有条件地格式化变量的系数(r)值(第3列)。

当存在指数p值时,我无法成功附加"***",我也尝试设置options(scipen=999),但无济于事。我已经能够使用str_sub()stri_sub()隔离p值中的'e',因此,如果可以让ifs在循环中正常工作,则可以使用if语句:

# p<0.001 (append "***") # p<0.01 (append "**") # p<0.05 (append "*")

以下语句可以单独正常工作,但是当我将以下内容添加到for()循环中时失败:

# Working asterisk append to coefficient value 
if(as.numeric(cell_id_input) < 0.05) {
cell_id_out <- paste0(cell_id_out,"*", sep="")     
}

使用指定的列(仅3和19)在矩阵“ dta”中的每一行上循环,并在满足以下条件时附加星号:

for (j in 1:nrow(dta)){
  cell_id_input <- dta[j,19] # Column that contains associated (p) values for 'cell_id_out'
  cell_id_out <- dta[j,3] { # Column that contains the coefficient (r) value associated with 'cell_id_input' 
  if(as.numeric(cell_id_input) < 0.001) { 
    cell_id_out <- paste0(cell_id_out,"***", sep="") 
} else if (as.numeric(cell_id_input) < 0.01) {
    cell_id_out <- paste0(cell_id_out,"**", sep="") 
} else if(as.numeric(cell_id_input) < 0.05) {
    cell_id_out <- paste0(cell_id_out,"*", sep="") 
} else {
    cell_id_out <- paste(cell_id_out)
}

1 个答案:

答案 0 :(得分:0)

df=data.frame("a"=c(0.1,0.6,0.00000000001,0.000000002),
           "b"=c(1,4,3,5),stringsAsFactors = FALSE)
df$a = as.character(df$a)
for (i in 1:nrow(df)){
  if (as.numeric(df$a[i])<0.05){
    df$a[i]=paste0(df$a[i],"*")
  }
}
       a b
1    0.1 1
2    0.6 4
3 1e-11* 3
4 2e-09* 5

这对我有用。您可以根据情况进行调整。您的问题是您将结果分配给cell_id_out变量,而不是dta数据框。