按组对所有列进行归一化
Normalize By Group for All Columns
我有一个包含 400 多列的数据集。我想在此计算中排除前两列,但我想将其包含在我的最终输出中。
对于列 3:ncol(df),我如何按组归一化?
这就是我现在所拥有的,但它给了我一个错误,同时 运行 花了很长时间:
library(BBmisc)
test<-df %>%
group_by(group) %>%
mutate_all(.vars = df[3:ncol(df)],
funs(normalize))
我希望能够将范围设置为 0 到 5。
这是我的数据集的样子:
df
group week col3 col4 col5 ......
A 1 25 56 87 ......
A 2 21 34 98 ......
A 3 34 67 100 ......
B 1 11 120 1000 ......
B 2 8 340 1200 ......
B 3 2 560 2000 ......
我想按组应用第 3 列及以后的规范化函数(没有硬编码到 col3 到 col5,因为我总共有 400 列)
我们需要mutate_at
df %>%
group_by(group) %>%
mutate_at(vars(-one_of("week")), normalize)
# A tibble: 6 x 5
# Groups: group [2]
# group week col3 col4 col5
# <chr> <int> <dbl> <dbl> <dbl>
#1 A 1 -0.250 0.218 -1.14
#2 A 2 -0.851 -1.09 0.429
#3 A 3 1.10 0.873 0.714
#4 B 1 0.873 -1 -0.756
#5 B 2 0.218 0 -0.378
#6 B 3 -1.09 1 1.13
如评论中所述,如果我们使用范围索引,则应小心 mutate_at
。目前,索引在没有 group_by
列的情况下开始。所以,如果我们想传递一系列索引,从开始和停止位置减去一个
df %>%
group_by(group) %>%
mutate_at(vars((3-1):(ncol(.)-1)), normalize)
# A tibble: 6 x 5
# Groups: group [2]
# group week col3 col4 col5
# <chr> <int> <dbl> <dbl> <dbl>
#1 A 1 -0.250 0.218 -1.14
#2 A 2 -0.851 -1.09 0.429
#3 A 3 1.10 0.873 0.714
#4 B 1 0.873 -1 -0.756
#5 B 2 0.218 0 -0.378
#6 B 3 -1.09 1 1.13
数据
df <- structure(list(group = c("A", "A", "A", "B", "B", "B"), week = c(1L,
2L, 3L, 1L, 2L, 3L), col3 = c(25L, 21L, 34L, 11L, 8L, 2L), col4 = c(56L,
34L, 67L, 120L, 340L, 560L), col5 = c(87L, 98L, 100L, 1000L,
1200L, 2000L)), class = "data.frame", row.names = c(NA, -6L))
我有一个包含 400 多列的数据集。我想在此计算中排除前两列,但我想将其包含在我的最终输出中。
对于列 3:ncol(df),我如何按组归一化?
这就是我现在所拥有的,但它给了我一个错误,同时 运行 花了很长时间:
library(BBmisc)
test<-df %>%
group_by(group) %>%
mutate_all(.vars = df[3:ncol(df)],
funs(normalize))
我希望能够将范围设置为 0 到 5。
这是我的数据集的样子:
df
group week col3 col4 col5 ......
A 1 25 56 87 ......
A 2 21 34 98 ......
A 3 34 67 100 ......
B 1 11 120 1000 ......
B 2 8 340 1200 ......
B 3 2 560 2000 ......
我想按组应用第 3 列及以后的规范化函数(没有硬编码到 col3 到 col5,因为我总共有 400 列)
我们需要mutate_at
df %>%
group_by(group) %>%
mutate_at(vars(-one_of("week")), normalize)
# A tibble: 6 x 5
# Groups: group [2]
# group week col3 col4 col5
# <chr> <int> <dbl> <dbl> <dbl>
#1 A 1 -0.250 0.218 -1.14
#2 A 2 -0.851 -1.09 0.429
#3 A 3 1.10 0.873 0.714
#4 B 1 0.873 -1 -0.756
#5 B 2 0.218 0 -0.378
#6 B 3 -1.09 1 1.13
如评论中所述,如果我们使用范围索引,则应小心 mutate_at
。目前,索引在没有 group_by
列的情况下开始。所以,如果我们想传递一系列索引,从开始和停止位置减去一个
df %>%
group_by(group) %>%
mutate_at(vars((3-1):(ncol(.)-1)), normalize)
# A tibble: 6 x 5
# Groups: group [2]
# group week col3 col4 col5
# <chr> <int> <dbl> <dbl> <dbl>
#1 A 1 -0.250 0.218 -1.14
#2 A 2 -0.851 -1.09 0.429
#3 A 3 1.10 0.873 0.714
#4 B 1 0.873 -1 -0.756
#5 B 2 0.218 0 -0.378
#6 B 3 -1.09 1 1.13
数据
df <- structure(list(group = c("A", "A", "A", "B", "B", "B"), week = c(1L,
2L, 3L, 1L, 2L, 3L), col3 = c(25L, 21L, 34L, 11L, 8L, 2L), col4 = c(56L,
34L, 67L, 120L, 340L, 560L), col5 = c(87L, 98L, 100L, 1000L,
1200L, 2000L)), class = "data.frame", row.names = c(NA, -6L))