Замена значений в R-кадре данных, если другое значение Dataframe меньше 0 - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть два кадра данных в r с одинаковым размером.То, что я хочу сделать, это удалить значение первого кадра данных, если второй кадр данных имеет значение меньше нуля

Например, если кадр данных killer_stock имеет значения меньше 0, значения в rank_stock будут заменены наNA

stock <-c('1','2','3')
stock2 <-c('1','2','3')

rank_stock <- data.frame(stock,stock2)

stockc <-c('-1','2','3')
stock2c <-c('2','-1','1')

killer_stock <- data.frame(stockc,stock2c)

результирующий кадр данных будет выглядеть примерно так, как показано ниже.но у меня очень большой фрейм данных, и я хотел бы, чтобы значение rm не заменяло его на chr "NA"

stock_r <-c('NA','2','3')
stock_r2 <-c('1','NA','3')

result_stock <- data.frame(stock_r,stock_r2)

Заранее благодарю за помощь!

1 Ответ

0 голосов
/ 29 ноября 2018

Прежде всего, помещая кавычки вокруг значений в векторах, кадры данных заканчиваются столбцами факторов, а не числовыми (если используется системная опция stringsAsFactors по умолчанию).Первые 2 строки кода, который я ввел ниже, исправляют это, но вы можете пропустить их, если введете данные по-другому.

Я воспользуюсь функцией dplyr mutate_all, но есть решенияс базовым семейством функций R * apply, с которыми вам, возможно, захочется начать, если вы новичок в R. Есть много способов реализовать решение, но я преобразую killer_stock фрейм данных в 1 и NA, еслизначение выше нуля или ниже, соответственно.Затем я умножаю этот элемент данных по элементам на rank_stock кадр данных.NA раз любое число любое, поэтому эти значения будут преобразованы.

library(dplyr)
# Convert to numeric
killer_stock <- killer_stock %>% mutate_all(as.character) %>% mutate_all(as.numeric)
rank_stock <- rank_stock %>% mutate_all(as.character) %>% mutate_all(as.numeric)

# Convert to 1 or NA
df <- killer_stock %>% mutate_all(funs(ifelse(. < 0, NA, 1)))

# Element-wise multiplication
rank_stock * df

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