如何用带标签的增量键替换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
答案 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)))