Использование операторов if & else if в цикле (for) для условного форматирования - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть матрица с 52 столбцами, 1290 строк, которая содержит значения p и коэффициенты цикла, который я успешно выполнил.

В этом случае я хочу условно отформатировать один из коэффициентов переменной (r) значение (столбец 3) путем добавления звездочек к концу значения коэффициента в зависимости от связанного значения p (столбец 19).

Я не смог успешно добавить "***", когда присутствует экспоненциальное значение p, я также попытался установить options(scipen=999), но безрезультатно.Мне удалось выделить 'e', ​​присутствующее в значении p, используя str_sub() и stri_sub(), поэтому я мог бы использовать оператор if, если бы я мог заставить ifs работать правильно в цикле:

# 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="")     
}

Зацикливание каждой строки в матрице 'dta' с использованием указанных столбцов (только 3 и 19) и добавьте звездочку, если соответствует следующим критериям:

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 голосов
/ 25 февраля 2019
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...