如果另一个Dataframe值小于0,则替换R数据框中的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果另一个Dataframe值小于0,则替换R数据框中的值相关的知识,希望对你有一定的参考价值。
我在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)
结果数据框看起来如下所示。但是我有一个非常大的数据框,并且还希望将值替换为chr“NA”
stock_r <-c('NA','2','3')
stock_r2 <-c('1','NA','3')
result_stock <- data.frame(stock_r,stock_r2)
提前谢谢你的帮助!
答案
首先,通过在向量中的值周围加上引号,数据帧最终成为因子列而不是数字(如果使用默认的stringsAsFactors
系统选项)。我在下面输入的代码的前两行修复了这一点,但如果以不同方式输入数据,则可以跳过这些代码。
我将使用dplyr
函数mutate_all
,但是有一些apply
函数的基本R族的解决方案,如果你是R的新手,你可能想要开始。有许多方法可以实现解决方案,但我是如果该值分别高于零或低于0,则将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
以上是关于如果另一个Dataframe值小于0,则替换R数据框中的值的主要内容,如果未能解决你的问题,请参考以下文章
在 Pandas DataFrame 中用 None 替换无效值
R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0具体列的NA值替换(replace)为0若干列的NA值替换(replace)为0