在%

时间:2018-02-15 10:54:38

标签: r replace boolean

我在第二列中有一个数字从1到10的数据框: enter image description here

然而,有一些数字缺失(2,5,7,9)。对于缺少的数字,我想要“NA”。我通过以下代码实现了这一点:

df <- data.frame(group=as.integer(c(1,1,1,2,2,2)), numbers_with_gaps=as.integer(c(1,3,4,6,8,10)))
numbers_with_gaps <- df$numbers_with_gaps
numbers_complete <- c(1:10)

true_false_vector <- numbers_complete %in% numbers_with_gaps
numbers_complete[true_false_vector == FALSE] <- NA

所以最后,这个向量应该有10个条目: enter image description here

我的问题是我希望上面数据框的第一列也有这些“NA”值。不幸的是,将“真正的假向量”“应用”到整个数据帧是行不通的。哪个功能对实现我的目标有用?

2 个答案:

答案 0 :(得分:1)

您可以使用tidyverse来使用complete中的tidyr。然后使用NA中的groupnumbers_with_gaps中设置它们,即

library(tidyverse)

df %>% 
 complete(numbers_with_gaps = seq(10)) %>% 
 mutate(numbers_with_gaps = replace(numbers_with_gaps, is.na(group), NA))

给出,

# A tibble: 10 x 2
   numbers_with_gaps group
               <int> <int>
 1                 1     1
 2                NA    NA
 3                 3     1
 4                 4     1
 5                NA    NA
 6                 6     2
 7                NA    NA
 8                 8     2
 9                NA    NA
10                10     2

答案 1 :(得分:0)

df <- data.frame(group=as.integer(c(1,1,1,2,2,2)), numbers_with_gaps=as.integer(c(1,3,4,6,8,10)))
numbers_with_gaps <- df$numbers_with_gaps
numbers_complete <- c(1:10)

true_false_vector <- numbers_complete %in% numbers_with_gaps

df[which(true_false_vector == FALSE),] <- NA