在 dplyr 中按行方式和按列方式切换
switch between row wise and normal column wise in dplyr
我想知道如何在 dplyr 中在按行和按列(按列)之间切换。例如,下面的代码有效,但它会生成一些红色日志,如警告。我怎么能以普通样式(不是按行)执行“select”命令:
df <- tibble(id = 1:6, year1 = 15:10, year2 = 13:8, year3 = 30:35, year4 = 40:45)
df %>% rowwise() %>%
mutate(output = list(isoreg(c_across(year1:year4))$yf)) %>%
tidyr::unnest_wider(output) %>%
select(., -starts_with("year"))
我认为通过在上述模式之间轻松切换问题就可以解决。
rowwise()
实际上是对您的数据进行分组。因此,ungroup()
放弃按行行为。
一般来说,总是在完成分组操作后立即取消分组。否则,您的代码很容易出错。
Return 避免警告的命名输出。一种方法是使用 setNames
.
library(dplyr)
df %>%
rowwise() %>%
mutate(output = list(setNames(isoreg(c_across(year1:year4))$yf,
paste0('col', 1:4)))) %>%
tidyr::unnest_wider(output) %>%
select(-starts_with('year'))
# A tibble: 6 x 5
# id col1 col2 col3 col4
# <int> <dbl> <dbl> <dbl> <dbl>
#1 1 14 14 30 40
#2 2 13 13 31 41
#3 3 12 12 32 42
#4 4 11 11 33 43
#5 5 10 10 34 44
#6 6 9 9 35 45
我想知道如何在 dplyr 中在按行和按列(按列)之间切换。例如,下面的代码有效,但它会生成一些红色日志,如警告。我怎么能以普通样式(不是按行)执行“select”命令:
df <- tibble(id = 1:6, year1 = 15:10, year2 = 13:8, year3 = 30:35, year4 = 40:45)
df %>% rowwise() %>%
mutate(output = list(isoreg(c_across(year1:year4))$yf)) %>%
tidyr::unnest_wider(output) %>%
select(., -starts_with("year"))
我认为通过在上述模式之间轻松切换问题就可以解决。
rowwise()
实际上是对您的数据进行分组。因此,ungroup()
放弃按行行为。
一般来说,总是在完成分组操作后立即取消分组。否则,您的代码很容易出错。
Return 避免警告的命名输出。一种方法是使用 setNames
.
library(dplyr)
df %>%
rowwise() %>%
mutate(output = list(setNames(isoreg(c_across(year1:year4))$yf,
paste0('col', 1:4)))) %>%
tidyr::unnest_wider(output) %>%
select(-starts_with('year'))
# A tibble: 6 x 5
# id col1 col2 col3 col4
# <int> <dbl> <dbl> <dbl> <dbl>
#1 1 14 14 30 40
#2 2 13 13 31 41
#3 3 12 12 32 42
#4 4 11 11 33 43
#5 5 10 10 34 44
#6 6 9 9 35 45