r - 仅使用非 NA 单元格替换另一列中的单元格

标签 r replace rstudio swap

长期倾听者,第一次来电,所以如果我在帖子中或一般情况下遗漏了重要信息,我深表歉意。

简而言之,我有两列,其中一列填充了每个单元格(行为)。另一个(游戏)除了少数单元格外大部分都是NA,但每个单元格中的内容不一定相同。对于游戏中的每一个非NA,无论内容如何,​​我都想用它来替换行为列中相应行的数据。

这是数据:

behavior<-c("run","jump","play","walk","jump","walk","run","play","jump","jump")
game<-c(NA,"tag",NA,NA,NA,"slide",NA,"tag",NA,"hopscotch")

    test<-data.frame(behavior,game)

behavior    game
1   run     NA
2   jump    tag
3   play    NA
4   walk    NA
5   jump    NA
6   walk    slide
7   run     NA
8   play    tag
9   jump    NA
10  jump    hopscotch

我希望它看起来像:

behavior    game
1   run     NA
2   tag     tag
3   play    NA
4   walk    NA
5   jump    NA
6   slide   slide
7   run     NA
8   tag     tag
9   jump    NA
10  hopscotch   hopscotch

我尝试过使用 !(test$game==NA) 和 if/else 之类的东西来编写函数,但我认为我在这里遗漏了一些基本的东西。这看起来相当简单,但在搜索 stackoverflow 后,我看到了大量关于如何替换 NA 的建议,但没有关于如何仅使用非 NA 来替换已填充的单元格的建议。出于好奇,我也很感兴趣是否有一种方法可以交换单元格值,因此第二行将是标记/跳转而不是标记/标记。很高兴提供任何额外的信息/说明,非常感谢任何建议。

最佳答案

将数据读取为字符串而不是因子

test<- data.frame(behavior,game, stringsAsFactors = FALSE)

我们可以将简单的ifelsetransform结合使用,其中behavior的值根据NA值进行更改游戏列。

transform(test, behavior = ifelse(is.na(game), behavior, game))

#    behavior      game
#1        run      <NA>
#2        tag       tag
#3       play      <NA>
#4       walk      <NA>
#5       jump      <NA>
#6      slide     slide
#7        run      <NA>
#8        tag       tag
#9       jump      <NA>
#10 hopscotch hopscotch

因子在内部存储为数字,如果您不将它们作为字符读取,那么相同的代码将产生

test<- data.frame(behavior,game)
transform(test, behavior = ifelse(is.na(game), behavior, game))
#   behavior      game
#1         3      <NA>
#2         3       tag
#3         2      <NA>
#4         4      <NA>
#5         1      <NA>
#6         2     slide
#7         3      <NA>
#8         3       tag
#9         1      <NA>
#10        1 hopscotch

这会非常困惑且难以调试。或者,我们可以使用 as.character 覆盖因子值,这将给出预期的输出。

transform(test, behavior = ifelse(is.na(game), as.character(behavior), 
                                               as.character(game)))

关于r - 仅使用非 NA 单元格替换另一列中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59750886/

相关文章:

r - ggplot2 多面线图的线条区域用纯色填充,为什么?

javascript - 使用 jQuery 从一个位置复制文本,以替换其他位置的文本

recursion - 在 Mathematica 中,为什么递归函数中的替换不会终止?

r - 每个方面的总和百分比 - 尊重 "fill"

sql - dplyr 将列粘贴到远程数据库中

r - 在包函数中访问 sysdata.rda

javascript - 正则表达式适用于 regex101 但不适用于 javascript

r - 从 R 中的一系列传单 map 创建一个 gif

r - 使用 ADD=Shiny 添加 shiny server 和 rocker verse image

r - 在RStudio中等待用户响应