使用带标签的增量键替换NA值

时间:2016-06-02 11:04:54

标签: r dataframe dplyr

如何用带标签的增量键替换NA值?

玩具data.frame:

data1 <- c(22,40,72,41,66,66,66)
key <- c(NA,"other",0,0,"other",0,"other")

df<- data.frame(data1,key)
df[df == 0] <- NA

我的d.f:

 data1   key
1    22  <NA>
2    40 other
3    72  <NA>
4    41  <NA>
5    66 other
6    66  <NA>
7    66 other

我使用dplyr包制作密钥

library (dplyr)
df %>% mutate(key = paste0('id-', 1:n()))

我的结果:

  data1  key
1    22 id-1
2    40 id-2
3    72 id-3
4    41 id-4
5    66 id-5
6    66 id-6
7    66 id-7

我想要的是:保持“他人”的价值

 data1   key
1    22  id-1
2    40 other
3    72  id-2
4    41  id-3
5    66 other
6    66  id-4
7    66 other

2 个答案:

答案 0 :(得分:4)

首先将df $ key转换为character:

df$key <- as.character(df$key)

然后

df$key[is.na(df$key)] <- paste0('id-', 1:length(df$key[is.na(df$key)]))



> df$key
[1] "id-1"   "other" "id-2"   "id-3"   "other" "id-4"   "other"

或者,使用dplyr:

library(dplyr)
df %>% 
  mutate(key = as.character(key),
         key = ifelse(is.na(key), paste0('id-', 1:length(key[is.na(key)])),
                      key))

答案 1 :(得分:3)

使用cumsum和mutate:

library(dplyr)
df %>% 
  mutate(key = ifelse(is.na(key), paste("id", sep = "-", cumsum(is.na(key))),
                      as.character(key)))