我想解決列名的一些問題,這在執行代碼時證實了錯誤。在這里,我將向您展示一個簡單的示例。請注意,我有一個名為的列TimeofCalculate,下面的代碼是Timeofcalculate,這會產生錯誤,因為代碼calculate不是Calculate. 但是,我希望它們中的任何一個都能在代碼中作業。另外,我有一個Timeofcalculate列資料庫。這a在我住的地方很常見。因此,我想解決這些提到的問題。
library(dplyr)
Test <- structure(list(date1 = as.Date(c("2021-11-01","2021-11-01","2021-11-01","2021-11-01")),
date2 = as.Date(c("2021-10-22","2021-10-22","2021-10-28","2021-10-30")),
Week = c("Friday", "Friday", "Thursday", "thursday"),
Category = c("FDE", "FDE", "FDE", "FDE"),
TimeofCalculate = c(4, 6, 6, 3)), class = "data.frame",row.names = c(NA, -4L))
Test %>%
group_by(Week = tools::toTitleCase(Week)) %>%
summarise(Time=mean(Timeofcalculate), .groups = 'drop')
uj5u.com熱心網友回復:
也許我們可以利用tidyselect::matches.
library(dplyr)
nms <- c('TimeofCalculate|Timeofcalculate|Timeofcalculate')
#alternative one
Test %>%
group_by(Week = tools::toTitleCase(Week)) %>%
summarise(across(matches(nms), mean), .groups = 'drop')
#> # A tibble: 2 × 2
#> Week TimeofCalculate
#> <chr> <dbl>
#> 1 Friday 5
#> 2 Thursday 4.5
#using a purrr style lambda
Test %>%
group_by(Week = tools::toTitleCase(Week)) %>%
summarise(across(matches(nms), ~mean(., na.rm = TRUE)), .groups = 'drop')
#> # A tibble: 2 × 2
#> Week TimeofCalculate
#> <chr> <dbl>
#> 1 Friday 5
#> 2 Thursday 4.5
#this will also work
Test %>%
group_by(Week = tools::toTitleCase(Week)) %>%
summarise(across(any_of(c("Timeofcalculate", "TimeofCalculate", "Timeofcalculate")), ~ mean(., na.rm = TRUE)), .groups = "drop")
由reprex 包(v2.0.1)于 2021 年 12 月 26 日創建
uj5u.com熱心網友回復:
我認為不同拼寫的作業日在資料庫中是不可接受的,首先解決這個問題。我們可以使用 built-intools::toTitleCase使首字母大寫。
Test <- transform(Test, Week=tools::toTitleCase(Week))
然后,我們可以很容易地aggregate通過列號,因此需要名稱。
aggregate(list(Time=Test[, 5]), list(Week=Test[, 3]), mean)
# Week Time
# 1 Friday 5.0
# 2 Thursday 4.5
如果手動硬編碼列索引有問題,我們可以使用agrepwhich 通過字串距離匹配最相似的列名稱的索引來標識。
c_tcalc <- agrep('timeofcalculate', names(Test))
c_week <- agrep('week', names(Test))
aggregate(list(Time=Test[, c_tcalc]), list(Week=Test[, c_week]), mean)
# Week Time
# 1 Friday 5.0
# 2 Thursday 4.5
資料:
Test <- structure(list(date1 = structure(c(18932, 18932, 18932, 18932
), class = "Date"), date2 = structure(c(18922, 18922, 18928,
18930), class = "Date"), Week = c("Friday", "Friday", "Thursday",
"Thursday"), Category = c("FDE", "FDE", "FDE", "FDE"), TimeofCalculate = c(4,
6, 6, 3)), class = "data.frame", row.names = c(NA, -4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393428.html
標籤:r
