【发布时间】:2020-01-15 11:52:27
【问题描述】:
长期听众,第一次来电,所以如果我在帖子或一般情况下遗漏了重要信息,我深表歉意。
简而言之,我有两列,其中一列填充了每个单元格(行为)。另一个(游戏)除了少数细胞外大多是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
我尝试使用 if/else 之类的 !(test$game==NA) 编写函数,但我认为我在这里缺少一些基本的东西。这看起来相当简单,但是在搜索了 stackoverflow 之后,我看到了大量关于如何替换 NA 的建议,但没有看到关于如何仅使用非 NA 来替换已经填充的单元格的建议。出于好奇,如果有办法交换单元格值,我也会感兴趣,所以第二行将是标签/跳转而不是标签/标签。很高兴提供任何额外的信息/澄清,任何建议都非常感谢。
【问题讨论】:
-
test$behavior[!is.na(test$game)] <- test$game[!is.na(test$game)] -
或
transform(test, behavior = ifelse(is.na(game), behavior, game))提供test<-data.frame(behavior,game, stringsAsFactors = FALSE) -
如此快速和简单——非常感谢!!
-
如果您想创建一个新列并保留原始数据,您可以这样做
transform(test, behavior1 = ifelse(is.na(game), behavior, game))