如果另一个数据帧值小于 0,则替换 R 数据帧中的值

标签 r dataframe compare

我在 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)

提前感谢您的帮助!

最佳答案

首先,通过在向量中的值周围加上引号,数据帧最终会成为因子列而不是数字(如果使用默认的 stringsAsFactors 系统选项)。我在下面输入的代码的前两行修复了这个问题,但如果您以不同的方式输入数据,则可以跳过这些代码。

我将使用 dplyr 函数 mutate_all,但也有一些带有基本 R 系列 apply 函数的解决方案,您可以使用它们如果您是 R 新手,那么您想从这里开始。实现解决方案的方法有很多,但我会将 killer_stock 数据帧转换为 1,如果值为分别高于零或低于零。然后,我将该数据帧按元素与 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

关于如果另一个数据帧值小于 0,则替换 R 数据帧中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530027/

相关文章:

python - 转置除一列时间戳之外的数据帧

java - 比较并检索 ArrayList 中的元素

r - bind_rows_(x, .id) 中的错误 : Argument 1 must have names using map_df in purrr

r - 在 R 中创建一个由级别名称填充的新列

R,使用 dplyr::filter() 和 %in% 将列名作为参数传递给函数

r - 在 R 中使用可变窗口滚动最大值/分钟的内存效率

hadoop - 如何将大部分数据合并到 spark/Hive 中的单个目录中

python - 对 .apply 和 lambda 的用法感到困惑

JavaScript 子字符串检查

java-8 - Comparator.comparing() 函数如何工作?