【问题标题】:How to add a column with sequential values that expands a data frame in R [duplicate]如何添加具有顺序值的列以扩展R中的数据框[重复]
【发布时间】:2021-01-11 16:23:29
【问题描述】:

我有一个基于累积放射性碳日期的专栏time_bin。但是我需要填补time_bin 序列中的空白。在下面的示例数据中,这意味着我需要 2700,并添加 3100。这将应用于许多具有不同差距的不同数据集,因此需要自动化。它将不得不扩展数据框的这个大小,如果其他列中的值现在只是 NA 则很好,因为我想我知道如何在创建它们后用我需要的内容填充它们。

time_bin 列是通过使用mutateceiling 创建的,如下所示,所以也许可以在此时更改它,而不是稍后。

我可以创建我需要的列,在下面称为seq,但我不知道如何强制它进入数据框。

如果有一种方法可以通过 tidyverse 方法来完成,而不是像我所做的那样使用矢量化,那也很棒。

到目前为止我有:

data<- structure(list(cumulative.time = c(2458.09948930625, 2580.22242330625, 
                                          2707.31373980624, 2839.71214840625, 2977.77505230625, 3121.87854830625
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

data <- data%>% mutate(time_bin=ceiling(cumulative.time/100)*100)

max <- max(data$time_bin, na.rm = TRUE)

min <- min(data$time_bin, na.rm = TRUE)

seq <- seq(from = min, to = max, by = 100)

谢谢大家!

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用tidyr 中的complete 创建一个介于time_bin 最小值和最大值之间的序列,步长为100。

    tidyr::complete(data, time_bin = seq(min(time_bin), max(time_bin), by = 100))
    
    # time_bin cumulative.time
    #     <dbl>           <dbl>
    #1     2500           2458.
    #2     2600           2580.
    #3     2700             NA 
    #4     2800           2707.
    #5     2900           2840.
    #6     3000           2978.
    #7     3100             NA 
    #8     3200           3122.
    

    【讨论】:

    • 您好 Ronak,感谢您的快速回复,但您的回答出现以下错误:错误:列名 time_bin 不得重复。
    • 您是在共享的数据还是其他一些数据上使用它?
    • 我现在明白了,我只是个白痴,试图通过管道运行它,但没有取出第二个数据,所以它正在运行 data%>% complete(data,. ..) 现在工作正常。谢谢
    【解决方案2】:

    这要求加入。如果我们将您的 seq 变量放入 data.frame,我们可以使用 data 进行适当的连接。

    library(dplyr)
    seq <- data.frame(time_bin = seq(from = min, to = max, by = 100))
    data %>% right_join(seq) %>% arrange(time_bin)
    Joining, by = "time_bin"
    # A tibble: 8 x 2
      cumulative.time time_bin
                <dbl>    <dbl>
    1           2458.     2500
    2           2580.     2600
    3             NA      2700
    4           2707.     2800
    5           2840.     2900
    6           2978.     3000
    7             NA      3100
    8           3122.     3200
    

    【讨论】:

    • 完美,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多