我需要替换数据框中列子集中的特定值。具体来说,我需要用0.9999替换此列子集中的值1。我创建了一个包含需要替换的列的列名的向量。这些列必须是名称的子集,而不是列号。
peaches <- c( 0, 1, 0, 1)
bananas <- c( 0, 1, 1, 1)
apples <- c( 1, 1, 1, 1)
oranges <- c (0, 0, 0, 1)
fruits <- data.frame(peaches, bananas, apples, oranges)
vector <- c("apples", "bananas", "peaches")
我的第一次尝试是这样的:
fruits[vector][fruits[vector] == 1] <- 0.9999
虽然它适用于此小型数据集,但它并不转换我正在使用的大型数据集中的值。有人知道为什么吗?
Tidyverse解决方案
library(tidyverse)
peaches <- c( 0, 1, 0, 1)
bananas <- c( 0, 1, 1, 1)
apples <- c( 1, 1, 1, 1)
oranges <- c (0, 0, 0, 1)
fruits <- data.frame(peaches, bananas, apples, oranges)
vector <- c("apples", "bananas", "peaches")
fruits %>%
mutate_at(vector, ~ replace(., . == 1, .9999))
#> peaches bananas apples oranges
#> 1 0.0000 0.0000 0.9999 0
#> 2 0.9999 0.9999 0.9999 0
#> 3 0.0000 0.9999 0.9999 0
#> 4 0.9999 0.9999 0.9999 1
由reprex软件包(v0.3.0)创建于2020-01-14
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句