R 和 DPLYR:我正在尝试总结一个非数字变量的平均站点分数,但我无法将其转换为百分比
R and DPLYR: I'm trying to summarize an average site score for a nonnumeric variable and I can't get it to convert to a percentage
我正在分析河流物理栖息地特征的数据集。对于每个站点,我们都有各种变量,这些变量是在 10 点样带上测量的。按位置、范围和横断面总结这些变量中的大多数很简单,但其中之一,底物,使用非数字数据进行评分。我正在尝试为每个横断面创建一个摘要以用于我的统计分析,但使用 dplyr
的 summarize
和 pivot_wider
不起作用。当我使用 summarize
基底变量的非数字值时 returns 出现错误,而对于 pivot_wider
我没有为从基底变量创建的新列输入的值。
这是我要总结的原始数据示例。
Location
Reach
Transect
Flow
Depth
Substrate
RIX
1
1
0.4
14
CO
RIX
1
1
0.5
12
BO
RIX
1
1
0.3
11
SA
RIX
1
1
0.4
14
GR
RIX
1
1
0.4
14
CO
RIX
1
2
0.4
17
CO
RIX
1
2
0.5
18
SA
RIX
1
2
0.1
22
SA
RIX
1
2
0.6
15
GR
RIX
1
2
0.4
14
SILT
RIX
2
1
0.4
14
CO
RIX
2
1
0.5
12
BO
RIX
2
1
0.3
11
SA
RIX
2
1
0.4
14
GR
RIX
2
1
0.4
14
CO
RIX
2
2
0.4
17
CO
RIX
2
2
0.5
18
SA
RIX
2
2
0.1
22
SA
RIX
2
2
0.6
15
GR
RIX
2
2
0.4
14
SILT
ARA
1
1
0.4
14
CO
ARA
1
1
0.5
12
BO
ARA
1
1
0.3
11
SA
ARA
1
1
0.4
14
GR
ARA
1
1
0.4
14
CO
ARA
1
2
0.4
17
CO
ARA
1
2
0.5
18
SA
ARA
1
2
0.1
22
SA
ARA
1
2
0.6
15
GR
ARA
1
2
0.4
14
SILT
ARA
2
1
0.4
14
CO
ARA
2
1
0.5
12
BO
ARA
2
1
0.3
11
SA
ARA
2
1
0.4
14
GR
ARA
2
1
0.4
14
CO
ARA
2
2
0.4
17
CO
ARA
2
2
0.5
18
SA
ARA
2
2
0.1
22
SA
RIX
2
2
0.6
15
GR
RIX
2
2
0.4
14
SILT
这是我要创建的内容。
Location
Reach
Transect
Flow
Depth
CO
GR
SA
SILT
BO
RIX
1
1
0.4
13
.40
.20
.20
0
.20
RIX
1
2
0.4
17.2
.20
.20
.40
.20
0
RIX
2
1
0.4
13
.40
.20
.20
0
.20
RIX
2
2
0.4
17.2
.20
.20
.40
.20
0
我不确定如何填充我在 dplyr
中使用 pivot_wider
函数创建的新列,以及如何在我使用 summarize
函数。
实现您想要的结果的一个选项是添加一个 id 列(使 pivot_wider 起作用)和一个新的 1 列(在转换为 wide 时用作指示器和值列格式):
library(dplyr)
library(tidyr)
df %>%
mutate(id = row_number(), value = 1) %>%
pivot_wider(names_from = "Substrate", values_from = "value", values_fill = 0) %>%
group_by(Location, Reach, Transect) %>%
summarise(across(everything(), mean), .groups = "drop") %>%
select(-id)
#> # A tibble: 8 × 10
#> Location Reach Transect Flow Depth CO BO SA GR SILT
#> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ARA 1 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 2 ARA 1 2 0.4 17.2 0.2 0 0.4 0.2 0.2
#> 3 ARA 2 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 4 ARA 2 2 0.333 19 0.333 0 0.667 0 0
#> 5 RIX 1 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 6 RIX 1 2 0.4 17.2 0.2 0 0.4 0.2 0.2
#> 7 RIX 2 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 8 RIX 2 2 0.429 16.4 0.143 0 0.286 0.286 0.286
我正在分析河流物理栖息地特征的数据集。对于每个站点,我们都有各种变量,这些变量是在 10 点样带上测量的。按位置、范围和横断面总结这些变量中的大多数很简单,但其中之一,底物,使用非数字数据进行评分。我正在尝试为每个横断面创建一个摘要以用于我的统计分析,但使用 dplyr
的 summarize
和 pivot_wider
不起作用。当我使用 summarize
基底变量的非数字值时 returns 出现错误,而对于 pivot_wider
我没有为从基底变量创建的新列输入的值。
这是我要总结的原始数据示例。
Location | Reach | Transect | Flow | Depth | Substrate |
---|---|---|---|---|---|
RIX | 1 | 1 | 0.4 | 14 | CO |
RIX | 1 | 1 | 0.5 | 12 | BO |
RIX | 1 | 1 | 0.3 | 11 | SA |
RIX | 1 | 1 | 0.4 | 14 | GR |
RIX | 1 | 1 | 0.4 | 14 | CO |
RIX | 1 | 2 | 0.4 | 17 | CO |
RIX | 1 | 2 | 0.5 | 18 | SA |
RIX | 1 | 2 | 0.1 | 22 | SA |
RIX | 1 | 2 | 0.6 | 15 | GR |
RIX | 1 | 2 | 0.4 | 14 | SILT |
RIX | 2 | 1 | 0.4 | 14 | CO |
RIX | 2 | 1 | 0.5 | 12 | BO |
RIX | 2 | 1 | 0.3 | 11 | SA |
RIX | 2 | 1 | 0.4 | 14 | GR |
RIX | 2 | 1 | 0.4 | 14 | CO |
RIX | 2 | 2 | 0.4 | 17 | CO |
RIX | 2 | 2 | 0.5 | 18 | SA |
RIX | 2 | 2 | 0.1 | 22 | SA |
RIX | 2 | 2 | 0.6 | 15 | GR |
RIX | 2 | 2 | 0.4 | 14 | SILT |
ARA | 1 | 1 | 0.4 | 14 | CO |
ARA | 1 | 1 | 0.5 | 12 | BO |
ARA | 1 | 1 | 0.3 | 11 | SA |
ARA | 1 | 1 | 0.4 | 14 | GR |
ARA | 1 | 1 | 0.4 | 14 | CO |
ARA | 1 | 2 | 0.4 | 17 | CO |
ARA | 1 | 2 | 0.5 | 18 | SA |
ARA | 1 | 2 | 0.1 | 22 | SA |
ARA | 1 | 2 | 0.6 | 15 | GR |
ARA | 1 | 2 | 0.4 | 14 | SILT |
ARA | 2 | 1 | 0.4 | 14 | CO |
ARA | 2 | 1 | 0.5 | 12 | BO |
ARA | 2 | 1 | 0.3 | 11 | SA |
ARA | 2 | 1 | 0.4 | 14 | GR |
ARA | 2 | 1 | 0.4 | 14 | CO |
ARA | 2 | 2 | 0.4 | 17 | CO |
ARA | 2 | 2 | 0.5 | 18 | SA |
ARA | 2 | 2 | 0.1 | 22 | SA |
RIX | 2 | 2 | 0.6 | 15 | GR |
RIX | 2 | 2 | 0.4 | 14 | SILT |
这是我要创建的内容。
Location | Reach | Transect | Flow | Depth | CO | GR | SA | SILT | BO |
---|---|---|---|---|---|---|---|---|---|
RIX | 1 | 1 | 0.4 | 13 | .40 | .20 | .20 | 0 | .20 |
RIX | 1 | 2 | 0.4 | 17.2 | .20 | .20 | .40 | .20 | 0 |
RIX | 2 | 1 | 0.4 | 13 | .40 | .20 | .20 | 0 | .20 |
RIX | 2 | 2 | 0.4 | 17.2 | .20 | .20 | .40 | .20 | 0 |
我不确定如何填充我在 dplyr
中使用 pivot_wider
函数创建的新列,以及如何在我使用 summarize
函数。
实现您想要的结果的一个选项是添加一个 id 列(使 pivot_wider 起作用)和一个新的 1 列(在转换为 wide 时用作指示器和值列格式):
library(dplyr)
library(tidyr)
df %>%
mutate(id = row_number(), value = 1) %>%
pivot_wider(names_from = "Substrate", values_from = "value", values_fill = 0) %>%
group_by(Location, Reach, Transect) %>%
summarise(across(everything(), mean), .groups = "drop") %>%
select(-id)
#> # A tibble: 8 × 10
#> Location Reach Transect Flow Depth CO BO SA GR SILT
#> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ARA 1 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 2 ARA 1 2 0.4 17.2 0.2 0 0.4 0.2 0.2
#> 3 ARA 2 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 4 ARA 2 2 0.333 19 0.333 0 0.667 0 0
#> 5 RIX 1 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 6 RIX 1 2 0.4 17.2 0.2 0 0.4 0.2 0.2
#> 7 RIX 2 1 0.4 13 0.4 0.2 0.2 0.2 0
#> 8 RIX 2 2 0.429 16.4 0.143 0 0.286 0.286 0.286