【问题标题】:Why doesn't a variable created with dplyr exist in the data frame?为什么数据框中不存在使用 dplyr 创建的变量?
【发布时间】:2021-05-27 09:24:31
【问题描述】:

我正在分析人口统计和健康调查数据集。我正处于创建变量的阶段。我使用dplyrmutate创建了一个变量,但是当我使用函数exist来查找它是否在数据框中,它是不存在的。为什么会这样?

datamatrix %>% mutate(hw70_1=case_when(hw70< -200 ~ 1, hw70>= -200 ~ 0))

# A tibble: 91,028 x 44
  X1 caseid order    b4 caseid.1 order.1  hw57 caseid.2 order.2  hw70
  <dbl> <chr>  <chr> <dbl> <chr>    <chr>   <dbl> <chr>    <chr>   <dbl>
 1     1 1 11 ~ b4_01    NA 1 11  2  hw57_1     NA 1 11  2  hw70_1     NA
 2     2 1 21 ~ b4_01     1 1 21  1  hw57_1      4 1 21  1  hw70_1   -103
 3     3 1 21 ~ b4_01     2 1 21  9  hw57_1      2 1 21  9  hw70_1     51
 4     4 1 21 ~ b4_01     1 1 21 13  hw57_1     NA 1 21 13  hw70_1     NA
 5     5 1 21 ~ b4_01    NA 1 21 14  hw57_1     NA 1 21 14  hw70_1     NA
 6     6 1 41 ~ b4_01     2 1 41  2  hw57_1     NA 1 41  2  hw70_1     NA
 7     7 1 41 ~ b4_01     1 1 41  6  hw57_1     NA 1 41  6  hw70_1     NA
 8     8 1 41 ~ b4_01    NA 1 41  7  hw57_1     NA 1 41  7  hw70_1     NA
 9     9 1 51 ~ b4_01     1 1 51  2  hw57_1     NA 1 51  2  hw70_1     NA
10    10 1 61 ~ b4_01     2 1 61  1  hw57_1      9 1 61  1  hw70_1   9999
# ... with 91,018 more rows, and 34 more variables: caseid.3 <chr>,
#   order.3 <chr>, hw71 <dbl>, caseid.4 <chr>, order.4 <chr>, hw72 <dbl>,
#   caseid.5 <chr>, order.5 <chr>, hw73 <dbl>, v005 <dbl>, v013 <dbl>,
#   v020 <dbl>, v021 <dbl>, v022 <dbl>, v025 <dbl>, v044 <dbl>, v106 <dbl>,
#   v137 <dbl>, v190 <dbl>, v437 <dbl>, v438 <dbl>, v445 <dbl>,
#   v447a <dbl>, v453 <dbl>, v501 <dbl>, v502 <dbl>, v714 <dbl>,
#   d005 <dbl>, d104 <dbl>, d106 <dbl>, d107 <dbl>, d108 <dbl>, v213 <dbl>,
#   hw70_1 <dbl>

> exists("hw70_1")
[1] FALSE

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你有两个问题:

    • exists("hw70_1") 测试变量是否存在于您的工作区中(不在某些数据框/tibble 中)
    • 您尚未保存mutate() 呼叫的结果。

    尝试类似:

    dm <- datamatrix %>% mutate(hw70_1=...)
    "hw70_1" %in% names(dm)
    ## or
    !is.null(dm[["hw70_1"]])
    ## or
    exists("hw70_1", list2env(dm))
    

    如果您愿意,可以覆盖/更新datamatrixdatamatrix &lt;- datamatrix %&gt;% mutate(...),或使用%&lt;&gt;% 运算符:datamatrix %&lt;&gt;% mutate(...),而不是创建一个新的、修改过的数据框(dm

    【讨论】:

    • 感谢您的支持。我尝试使用 hw70_1 和 hw73_1 创建一个新变量,并按照建议使用新的修改数据框,但我遇到了类似的问题,错误提示 hw73_1 不存在。为什么会这样? >dm % mutate(hw73_1=case_when(hw73= -200~0)) > exists("hw73_1", list2env(dm)) [1] TRUE > dm % mutate(hw74_1=case_when(hw70_1==0 & hw73_1==0 ~ 0, hw70_1==1 & hw73_1==1~ 1, TRUE ~ 99)) 错误:mutate() 输入问题hw74_1 . x object 'hw73_1' not found i Input hw74_1 is case_when(...)
    • 您的最后一条语句未对修改后的对象dm 进行操作。使用%&lt;&gt;% 运算符可能会更好,这样您就可以随时更新datamatrix
    • 是的,你是对的。感谢您指出这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多