简体   繁体   English

dplyr 中的问题:新列中不需要的 NA

[英]issue in dplyr: unwanted NA's in new column

I have the following data frame:我有以下数据框:

Xnumber   Number
X17339    EWY
X17339    LW2Y
X17401    EWC
X17401    LWY
X17466    EWC
X17466    LWY 
X17466    EWY
X17466    LWC

I want to create a new column, Number2, using the following code:我想使用以下代码创建一个新列 Number2:

library(dplyr 
df3<-df3 %>% group_by(Xnumber) %>% mutate(Number2=if_else(lead(Number)=="LWC","Unknown",Number))

This is what I the resulting data frame should look like:这就是我生成的数据框的样子:

    Xnumber   Number   Number2
    X17339    EWY      EWY
    X17339    LW2Y     LW2Y
    X17401    EWC      EWC
    X17401    LWY      LWY
    X17466    EWC      EWC
    X17466    LWY      LWY
    X17466    EWY      Unknown
    X17466    LWC      LWC

But instead, I also get NA's in my new column, like this.但相反,我在我的新专栏中也得到了 NA,就像这样。

    Xnumber   Number   Number2
    X17339    EWY      EWY
    X17339    LW2Y     NA
    X17401    EWC      EWC
    X17401    LWY      NA
    X17466    EWC      EWC
    X17466    LWY      LWY
    X17466    EWY      Unknown
    X17466    LWC      NA

I'm not sure why this is happening.我不确定为什么会这样。 Any thoughts?有什么想法吗?

Use default :使用default

library(dplyr)
 
df3<-df3 %>% 
  group_by(Xnumber) %>% 
  mutate(Number2=if_else(lead(Number, default = "") == "LWC","Unknown",Number))

Since you grouped your data, lead will return an NA at each group's end (no further in-group value ahead).由于您对数据进行了分组, lead将在每个组的末尾返回一个 NA(前面没有进一步的组内值)。 If you want to replace these with, say, the most recent non-NA, {tidyr}'s fill comes in handy.如果你想用最近的非 NA 替换它们,{tidyr} 的fill就派上用场了。 Example:例子:

data.frame(x = c(1:3, NA, 5)) |>
   tidyr::fill(x, .direction = 'down')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM