我有一個# A tibble: 33,478 x 12類似于所附圖片的形式的資料集(原始版本,),以及部分資料:

dput(head(canals2, n=10))
structure(list(Site = c(1, 2, 4, 11, 10, 12, 13, 14, 15, 16),
`Sample Date` = c("2/11/2004", "2/11/2004", "2/11/2004",
"2/11/2004", "2/11/2004", "2/11/2004", "2/11/2004", "2/11/2004",
"2/11/2004", "2/11/2004"), `Analysis code` = c("NH3", "NH3",
"NH3", "Chl a", "Chl a", "Chl a", "NH3", "Chl a", "NH3",
"NH3"), Analysis = c("Ammonia-Nitrogen", "Ammonia-Nitrogen",
"Ammonia-Nitrogen", "Chlorophyll a", "Chlorophyll a", "Chlorophyll a",
"Ammonia-Nitrogen", "Chlorophyll a", "Ammonia-Nitrogen",
"Ammonia-Nitrogen"), Result = c(0.068, 0.07, 0.014, 1.31,
1.39, 1.95, 0.247, 1.46, 0.113, 0.17), Units = c("mg/L",
"mg/L", "mg/L", "mg/m3", "mg/m3", "mg/m3", "mg/L", "mg/m3",
"mg/L", "mg/L")), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
例如,我想嘗試使用線性模型(例如,使用lm()函式)從“氨氮”中預測“葉綠素 a” 。lm()將列名作為“公式”的輸入,但是這個資料集的生成方式非常不同。我應該Results為每個分析使用列中的值,但我似乎找不到像這樣組織我的資料的好方法。
到目前為止,我嘗試通過分析拆分資料,目的是為每個分析創建一個新的資料框,然后將 替換為Result在該資料框中選擇的分析的名稱。這是我使用的函式(在主資料集上運行它,這就是它包含更多分析名稱的原因):
analysis_list = unique(canals$Analysis)
> analysis_list
1 “氨氮” “葉綠素 a” “糞便大腸菌群”
[4] “比電導” “銅” “溶解氧”
[7] “大腸桿菌” “腸球菌” “亞硝酸鹽 硝酸鹽”
[10] “正磷酸鹽” ” “pH” “鹽度”
[13] “溫度” “總凱氏氮” “總氮”
[16] “總磷” “濁度”
split_an <- function() {
my_list <- vector(mode = "list", length = 0)
for (i in 1:17) {
analysis_var = analysis_list[i]
my_var <- canals %>% filter(Analysis == analysis_var)
my_list[[i]] = my_var
}
}
split_an()
不幸的是,這并沒有按預期作業,而且我在合并我創建的表時遇到了很多問題。我也嘗試了其他方法,但無濟于事。有人愿意提供任何建議嗎?
uj5u.com熱心網友回復:
如果我理解正確,那么聽起來您正在嘗試重組資料以使其成為用于建模的正確形式。我認為使用pivot_wider(from tidyr) 會讓你得到你想要的。這是我所做的:
首先,這是您的資料作為資料框:
Site <- c(1, 2, 4, 11, 10, 12, 13, 14, 15, 16)
Sample_Date <- c("2/11/2004", "2/11/2004", "2/11/2004", "2/11/2004",
"2/11/2004", "2/11/2004", "2/11/2004", "2/11/2004", "2/11/2004", "2/11/2004")
Analysis_code <- c("NH3", "NH3", "NH3", "Chl a", "Chl a", "Chl a", "NH3", "Chl
a", "NH3", "NH3")
Analysis <- c("Ammonia-Nitrogen", "Ammonia-Nitrogen", "Ammonia-Nitrogen",
"Chlorophyll a", "Chlorophyll a", "Chlorophyll a", "Ammonia-Nitrogen",
"Chlorophyll a", "Ammonia-Nitrogen", "Ammonia-Nitrogen")
Results <- c(0.068, 0.07, 0.014, 1.31, 1.39, 1.95, 0.247, 1.46, 0.113, 0.17)
Units <- c("mg/L", "mg/L", "mg/L", "mg/m3", "mg/m3", "mg/m3", "mg/L", "mg/m3",
"mg/L", "mg/L")
Site Sample_Date Analysis_code Analysis Results Units
1 1 2/11/2004 NH3 Ammonia-Nitrogen 0.068 mg/L
2 2 2/11/2004 NH3 Ammonia-Nitrogen 0.070 mg/L
3 4 2/11/2004 NH3 Ammonia-Nitrogen 0.014 mg/L
4 11 2/11/2004 Chl a Chlorophyll a 1.310 mg/m3
5 10 2/11/2004 Chl a Chlorophyll a 1.390 mg/m3
接下來,我們將申請pivot_wider傳播Analysis變數。這將為您擁有的每種Analysis型別留下一列,以及它們各自的Results值。
#spread the analysis variable
new_df <- df %>%
pivot_wider(names_from = "Analysis", values_from = "Results")
Site Sample_Date Analysis_code Units `Ammonia-Nitrogen` `Chlorophyll a`
<dbl> <chr> <chr> <chr> <dbl> <dbl>
1 1 2/11/2004 NH3 mg/L 0.068 NA
2 2 2/11/2004 NH3 mg/L 0.07 NA
3 4 2/11/2004 NH3 mg/L 0.014 NA
4 11 2/11/2004 Chl a mg/m3 NA 1.31
5 10 2/11/2004 Chl a mg/m3 NA 1.39
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381268.html
