Добавление столбца в конец фрейма данных на основе значений столбцов в R

#r

#r

Вопрос:

У меня есть фрейм данных следующим образом

 structure(list(ID = c("A142867.12", "F134242.15", "H136244.11", 
"Y184937.13"), Name = c("BB", "PP", "II", "WW"), qusa = c(10.0341, 
12.7213, 0.157605, 0), nhg = c(24.7632, 50.562, 0.247947, 0.164736
), opk = c(26.931, 5.9474, 0.79539, 0)), class = "data.frame", row.names = c(NA, 
-4L))
 

Мне просто нужно добавить еще один столбец (результат) с тегом (pass), если значения больше или равны 1.2, как это

 ID         Name qusa     nhg        opk    Result
A142867.12  BB  10.0341  24.7632    26.931  Pass
F134242.15  PP  12.7213  50.562     5.9474  Pass
H136244.11  II  0.157605 0.247947   0.79539  -
Y184937.13  WW  0        0.164736   0        -
 

Комментарии:

1. Мне нужно добавить один столбец с именем Results в конце на основе значений

2. Необходимо напечатать pass, если все столбцы имеют больше или равны 1,2

Ответ №1:

Вы можете назначить 'Pass' , если все числовые столбцы в фрейме данных больше, чем равно 1.2.

 cols <- sapply(df, is.numeric)
df$result <- ifelse(rowSums(df[cols] < 1.2) == 0, 'Pass', '-')
#Without ifelse
#df$result <- c('-', 'Pass')[(rowSums(df[cols] < 1.2) == 0)   1]
df

#          ID Name      qusa       nhg      opk result
#1 A142867.12   BB 10.034100 24.763200 26.93100   Pass
#2 F134242.15   PP 12.721300 50.562000  5.94740   Pass
#3 H136244.11   II  0.157605  0.247947  0.79539      -
#4 Y184937.13   WW  0.000000  0.164736  0.00000      -
 

Ответ №2:

Или вы можете использовать case_when из пакета dplyr:

 library(dplyr)

#your data
abc <- structure(list(ID = c("A142867.12", "F134242.15", "H136244.11", "Y184937.13"), 
               Name = c("BB", "PP", "II", "WW"), 
               qusa = c(10.0341, 12.7213, 0.157605, 0), 
               nhg = c(24.7632, 50.562, 0.247947, 0.164736), 
               opk = c(26.931, 5.9474, 0.79539, 0)), 
          class = "data.frame", row.names = c(NA, -4L))

# case_when
abc <- abc %>% 
  mutate(Results = case_when(qusa >= 1.2 | nhg >= 1.2 | opk >= 1.2 ~ "pass",
                             TRUE ~ "-"))
# View dataframe
View(abc)