При объединении значений столбцов в r, как вы выбираете более высокое (максимальное) значение

#r #dataframe #merge #max #multiple-columns

#r #фрейм данных #слияние #макс #несколько столбцов

Вопрос:

У меня есть фрейм данных с именем x8, но я хочу объединить два столбца Yield в столбец с именем x. Для «apple» я хочу, чтобы был выбран более высокий yield (0,8). Я хочу, чтобы столбец x выбирал более высокое значение.

код r:

 x8$x <- paste((x8[,2]),(x8[,4]))
 

Dput

x8:

 structure(list(Row.names = c("AAPL", "FB", "HRUB", "HUKX", "TSLA", 
"XLYS"), `12m yield` = c("0.8", "", "5.85", "4.19", "", "0.00"), 
    `Price to forecast PE` = c("", "", "7.92", "14.39", "", "23.16"
    ), Yield = c("0.7", "", "", "", "", ""), PE = c("37.3", "43.3", 
    "", "", "", ""), x = c(" 0.7", " ", "5.85 ", "4.19 ", " ", 
    "0.00 ")), row.names = c(NA, -6L), class = "data.frame")
 

Ответ №1:

Может быть, вы ищете это?

 #Code
x8$x <- apply(x8[,c(2,4)],1,max,na.rm=T)
 

Кроме того, если вы преобразуете в числовое значение, вы получите следующее:

 #Code
x8$`12m yield` <- as.numeric(x8
 #r #dataframe #merge #max #multiple-columns

 #r #фрейм данных #слияние #макс #несколько столбцов

Вопрос:

У меня есть фрейм данных с именем x8, но я хочу объединить два столбца Yield в столбец с именем x. Для "apple" я хочу, чтобы был выбран более высокий yield (0,8). Я хочу, чтобы столбец x выбирал более высокое значение. код r:
 x8$x <- paste((x8[,2]),(x8[,4]))
 

Dput

x8:

 structure(list(Row.names = c("AAPL", "FB", "HRUB", "HUKX", "TSLA", 
"XLYS"), `12m yield` = c("0.8", "", "5.85", "4.19", "", "0.00"), 
    `Price to forecast PE` = c("", "", "7.92", "14.39", "", "23.16"
    ), Yield = c("0.7", "", "", "", "", ""), PE = c("37.3", "43.3", 
    "", "", "", ""), x = c(" 0.7", " ", "5.85 ", "4.19 ", " ", 
    "0.00 ")), row.names = c(NA, -6L), class = "data.frame")
 

Ответ №1:

Может быть, вы ищете это?

 #Code
x8$x <- apply(x8[,c(2,4)],1,max,na.rm=T)
 

Кроме того, если вы преобразуете в числовое значение, вы получите следующее:

12m yield`)
x8$Yield <- as.numeric(x8$Yield)
x8$x <- apply(x8[,c(2,4)],1,max,na.rm=T)

Вывод:

 x8
  Row.names 12m yield Price to forecast PE Yield   PE    x
1      AAPL      0.80                        0.7 37.3 0.80
2        FB        NA                         NA 43.3 -Inf
3      HRUB      5.85                 7.92    NA      5.85
4      HUKX      4.19                14.39    NA      4.19
5      TSLA        NA                         NA      -Inf
6      XLYS      0.00                23.16    NA      0.00
 

Ответ №2:

Сначала нам нужно преобразовать столбцы в numeric поскольку это character столбцы

 nm1 <- c("12m yield", "Yield")
x8[nm1] <- lapply(x8[nm1], as.numeric)
 

затем используйте pmax , чтобы получить max значение, которое vectorized

 x8$x <- with(x8, pmax(`12m yield`, Yield, na.rm = TRUE))
x8$x
#[1] 0.80   NA 5.85 4.19   NA 0.00
 

Или другой вариант rowMaxs из matrixStats

 library(matrixStats)
rowMaxs(as.matrix(x8[nm1]), na.rm = TRUE)
#[1] 0.80 -Inf 5.85 4.19 -Inf 0.00
 

Или с помощью tidyverse

 library(dplyr)
x8 %>% 
     type.convert(as.is = TRUE) %>% 
     mutate(x = pmax(`12m yield`, Yield, na.rm = TRUE))
#  Row.names 12m yield Price to forecast PE Yield   PE    x
#1      AAPL      0.80                   NA   0.7 37.3 0.80
#2        FB        NA                   NA    NA 43.3   NA
#3      HRUB      5.85                 7.92    NA   NA 5.85
#4      HUKX      4.19                14.39    NA   NA 4.19
#5      TSLA        NA                   NA    NA   NA   NA
#6      XLYS      0.00                23.16    NA   NA 0.00