如何通过列索引而不是使用跨列名称来改变多列?
How to mutate several columns by column index rather than column name using across?
基于这个问题:
我想使用列索引对多个列进行变异,例如变异的源和目标:
df <- tribble(~C1,~C2,~C3,1,2,3,4,5,6,7,8,9)
dfn <- df
dfn[,1:2] = dfn[,3] # like this in dplyr
df <- df %>% mutate(accross(.[[1:2]]) = .[[3]])
给出:
Fehler: Unerwartete(s) '=' in "df <- df %>% mutate(accross(.[[1:2]]) ="
Error: Unexpected '=' in "df <- df %>% mutate(accross(.[[1:2]]) ="
across 的第一个参数可以指定要使用和设置的列,第二个参数是用于转换它们的函数。 across 的第二个参数也可以是 function(x) .[[3]]
.
df %>% mutate(across(1:2, ~ cur_data()[[3]]))
给予:
# A tibble: 3 x 3
C1 C2 C3
<dbl> <dbl> <dbl>
1 3 3 3
2 6 6 6
3 9 9 9
这些也可以工作,并且都比上面的 运行 快,最后一个是最快的。
df %>% replace(1:2, .[[3]])
library(collapse)
df %>% ftransformv(1:2, function(x) .[[3]])
一个选项可以是:
df %>%
mutate(across(1:2, ~ across(3) %>% pull()))
C1 C2 C3
<dbl> <dbl> <dbl>
1 3 3 3
2 6 6 6
3 9 9 9
基于这个问题:
我想使用列索引对多个列进行变异,例如变异的源和目标:
df <- tribble(~C1,~C2,~C3,1,2,3,4,5,6,7,8,9)
dfn <- df
dfn[,1:2] = dfn[,3] # like this in dplyr
df <- df %>% mutate(accross(.[[1:2]]) = .[[3]])
给出:
Fehler: Unerwartete(s) '=' in "df <- df %>% mutate(accross(.[[1:2]]) ="
Error: Unexpected '=' in "df <- df %>% mutate(accross(.[[1:2]]) ="
across 的第一个参数可以指定要使用和设置的列,第二个参数是用于转换它们的函数。 across 的第二个参数也可以是 function(x) .[[3]]
.
df %>% mutate(across(1:2, ~ cur_data()[[3]]))
给予:
# A tibble: 3 x 3
C1 C2 C3
<dbl> <dbl> <dbl>
1 3 3 3
2 6 6 6
3 9 9 9
这些也可以工作,并且都比上面的 运行 快,最后一个是最快的。
df %>% replace(1:2, .[[3]])
library(collapse)
df %>% ftransformv(1:2, function(x) .[[3]])
一个选项可以是:
df %>%
mutate(across(1:2, ~ across(3) %>% pull()))
C1 C2 C3
<dbl> <dbl> <dbl>
1 3 3 3
2 6 6 6
3 9 9 9