原位替换数据框中列的值

佩蒂亚尔

我想替换数据框中某些列中的值。我可以做一次,但是一旦尝试构建函数,它就会停止工作。我也想在所有列的子集上重复该函数,我也不知道该怎么做。

这是一个例子:

library(tidyverse)

Kid = c('Alfie', 'Brenda', 'Charlie', 'Dalma')
Likes_pie = c('Yes', 'Yes', 'No', NA)
Likes_sunshine = c(NA, 'Yes', 'Yes', 'No')
Likes_friendship = c('Yes', NA, 'Yes', 'No')
my.d = cbind(Kid, Likes_pie, Likes_sunshine) %>% as_tibble()

我想串换“是”,“T”和“无”到“F”Likes_pieLikes_sunshine但是我想指定这两列并省略Likes_friendship我要保留NA-s。除“是”和“否”外,没有其他值。

可以做一栏:

my.d = my.d %>% 
  mutate(
    Likes_pie = case_when(
      Likes_pie == 'Yes' ~ 'T',
      Likes_pie == 'No' ~ 'F'
    )
  )

但这在函数中不起作用:

valConverter = function(d, var.value){
  d = d %>% 
    mutate(
      var.value = case_when(
        var.value == 'Yes' ~ 'T',
        var.value == 'No' ~ 'F'
      )
    )
return(d)
}

my.d = valConverter(my.d, Likes_sunshine)
my.d$Likes_pie
my.d$Likes_sunshine # :E

假设这样做了,我将如何替换每列的列值?sg喜欢mutate_if(d, c('Likes_pie', 'Likes_sunshine'), function(x) nomConverter(x))走的路吗?

万维网

使用lapply的解决方案ifelse我假设Likes_friendship是列之一(否则,为什么要创建此向量?),但是列是否在数据框中并不影响此解决方案的有效性。

顺便说一下TFRTRUER中的保留字FALSE分别表示逻辑值性格"T""F"可能使别人困惑。

# Store the column name you want to change
cols <- c("Likes_pie", "Likes_sunshine")

my.d[cols] <- lapply(my.d[cols], function(x) ifelse(x == "Yes", "T", "F"))
my.d
# # A tibble: 4 x 4
#   Kid     Likes_pie Likes_sunshine Likes_friendship
#   <chr>   <chr>     <chr>          <chr>           
# 1 Alfie   T         NA             Yes             
# 2 Brenda  T         T              NA              
# 3 Charlie F         T              Yes             
# 4 Dalma   NA        F              No     

数据

library(tidyverse)

Kid = c('Alfie', 'Brenda', 'Charlie', 'Dalma')
Likes_pie = c('Yes', 'Yes', 'No', NA)
Likes_sunshine = c(NA, 'Yes', 'Yes', 'No')
Likes_friendship = c('Yes', NA, 'Yes', 'No')
my.d = cbind(Kid, Likes_pie, Likes_sunshine, Likes_friendship) %>% as_tibble()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章