【问题标题】:How can i add a row vector in a tibble in R?如何在 R 的小标题中添加行向量?
【发布时间】:2021-09-21 12:57:06
【问题描述】:

我在 R 中有一个 tibble,每个月有 11 个观察值。除了 6 月,它有 0 个。 我的数据框(tibble)如下所示:

library(tidyverse)
A = c(1,2,3,4,5,7,8,9,10,11,12)
B = rnorm(11,0,1)
Data = tibble(A,B);Data

但我想添加这个时间序列 6 月的 0 观测值。 类似的东西:

d = c(6,0);d
newdata = rbind(Data,d)
order(newdata$A)

但是 12(十二月)出现了。有什么帮助吗?

【问题讨论】:

  • tidyr::complete(Data, A = seq(min(A), max(A)), fill = list(B = 0))怎么样?
  • 阅读订单帮助。这不是你想要的。

标签: r tidyverse add


【解决方案1】:

两种方法:

(1) 我们可以为此使用add_row。但是,d 必须命名,我们需要使用 tribble bang !!! 运算符将其拼接成 add_row。然后我们可以arrange数据,这样月份就从1到12排序。当然你可以直接指定add_row,就像@Chris的答案一样,不需要外部向量。

library(dplyr)

A = c(1,2,3,4,5,7,8,9,10,11,12)
B = rnorm(11,0,1)
Data = tibble(A,B)

d = c(A = 6, B = 0)

newdata <- Data %>% 
  add_row(!!! d) %>% 
  arrange(A)

# check
newdata
#> # A tibble: 12 x 2
#>        A        B
#>    <dbl>    <dbl>
#>  1     1  1.22   
#>  2     2  0.0729 
#>  3     3  0.597  
#>  4     4 -1.26   
#>  5     5  0.928  
#>  6     6  0      
#>  7     7 -1.08   
#>  8     8  0.704  
#>  9     9 -0.119  
#> 10    10 -0.462  
#> 11    11 -0.00388
#> 12    12  1.56

order(newdata$A) 
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12

(2) 我们可以使用tidyr::complete,正如@Ronak 在 cmets 中所建议的那样,尽管我们使用与full_seq 略有不同的规范:

library(tidyr)

Data %>% 
  complete(A = full_seq(A, 1), fill = list(B = 0))

#> # A tibble: 12 x 2
#>        A      B
#>    <dbl>  <dbl>
#>  1     1 -0.258
#>  2     2 -1.18 
#>  3     3 -0.165
#>  4     4  0.775
#>  5     5  0.926
#>  6     6  0    
#>  7     7  0.343
#>  8     8  1.10 
#>  9     9  0.359
#> 10    10  0.934
#> 11    11 -0.444
#> 12    12  0.184

reprex package (v2.0.1) 于 2021 年 9 月 21 日创建

【讨论】:

  • 再次当我order(newdata$A) 问题仍然存在
  • @NikosTsiantakis:请查看我的更新答案,包括您的支票。我正在使用 dplyr 1.0.7 和 R 4.1。
【解决方案2】:

您可以在add_row中定义附加行:

library(dplyr)
Data %>%
  add_row(A = 6, B = 0) %>% 
  arrange(A)
# A tibble: 12 x 2
       A       B
   <dbl>   <dbl>
 1     1 -0.547 
 2     2 -0.564 
 3     3 -0.890 
 4     4 -0.477 
 5     5 -0.998 
 6     6  0     
 7     7 -0.776 
 8     8  0.0645
 9     9  0.959 
10    10 -0.110 
11    11 -0.511 
12    12 -0.911 

【讨论】:

  • 我可以通过某种方式使用完整功能来避免这种添加吗?
  • 不确定我是否理解。最好、最简洁的解决方案是 Ronak 的,它使用complete,即:tidyr::complete(Data, A = seq(min(A), max(A)), fill = list(B = 0))- 你试过了吗?
  • 是的,它有效,但我希望避免它
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 2020-11-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多