#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