gpt4 book ai didi

r - 如何在 R 中仅附加数据框的两列

转载 作者:行者123 更新时间:2023-12-02 18:06:54 25 4
gpt4 key购买 nike

假设我有以下数据框:

dt <- data.frame(id= c(1),
parameter= c("a","b","c"),
start_day = c(1,8,4),
end_day = c(16,NA,30))

enter image description here

我需要合并 start_dayend_day 列(我们将新列称为 day),以便保留所有其他列。另外,我需要创建另一列来指示每行是否显示 start_day 或 end_day。为了澄清这一点,我希望创建以下数据框

enter image description here

我使用以下代码创建上述数据框:

dt1 <- subset(dt, select = -c(end_day))
dt1 <- dt1 %>% rename(day = start_day)
dt1$start <- 1

dt2 <- subset(dt, select = -c(start_day))
dt2 <- dt2 %>% rename(day = end_day)
dt2$end <- 1

dt <- bind_rows(dt1, dt2)
dt <- dt[order(dt$id, dt$parameter),]

虽然我的代码有效,但我对我的解决方案不满意。我确信有更好、更干净的方法来做到这一点。如果有任何关于解决此问题的更好替代方案的意见,我将不胜感激。

最佳答案

(tidyr::pivot_longer(dt, cols = c(start_day, end_day), values_to = "day")                                                        
|> dplyr::mutate(start = ifelse(name == "start_day", 1, NA),
end = ifelse(name == "end_day", 1, NA))
)

结果:

# A tibble: 6 × 6                                                                                            
id parameter name day start end
<dbl> <chr> <chr> <dbl> <dbl> <dbl>
1 1 a start_day 1 1 NA
2 1 a end_day 16 NA 1
3 1 b start_day 8 1 NA
4 1 b end_day NA NA 1
5 1 c start_day 4 1 NA
6 1 c end_day 30 NA 1

您可以去掉 name 列,但也许它比新的 start/end 列更有用?

关于r - 如何在 R 中仅附加数据框的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73057274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com