更改列值而不是列名 库(tidyverse) #尝试1 特里布尔( ~A,~Y,~V1,~V2,~V3, “一”,2,89,52,37, “两个”、3、45、34、86、, “阿尔法”,1,33,36,43, “贝塔”,1,21,33,45, ) %>% 突变(selectYCol=paste0(“V”,Y)) #>#tibble:4 x 6 #>Y V1 V2 V3 selectYCol #> #>1一2 89 52 37 V2 #>2两个3 45 34 86 V3 #>3阿尔法1 33 36 43 V1 #>4 beta 1 21 33 45 V1 #尝试2 特里布尔( ~A,~Y,~V1,~V2,~V3, “一”,2,89,52,37, “两个”、3、45、34、86、, “阿尔法”,1,33,36,43, “贝塔”,1,21,33,45, ) %>% 突变(selectYCol=glue::glue(“V{Y}”)) #>#tibble:4 x 6 #>Y V1 V2 V3 selectYCol #> #>1一2 89 52 37 V2 #>2两个3 45 34 86 V3 #>3阿尔法1 33 36 43 V1 #>4 beta 1 21 33 45 V1
在selectYCol中,我们需要列值,而不是列名。“V”是静态的,数字基于Y列 因此,selectYCol结果应该是52、86、33、21,分别来自V2、V3、V1、V1列更改列值而不是列名 库(tidyverse) #尝试1 特里布尔( ~A,~Y,~V1,~V2,~V3, “一”,2,89,52,37, “两个”、3、45、34、86、, “阿尔法”,1,33,36,43, “贝塔”,1,21,33,45, ) %>% 突变(selectYCol=paste0(“V”,Y)) #>#tibble:4 x 6 #>Y V1 V2 V3 selectYCol #> #>1一2 89 52 37 V2 #>2两个3 45 34 86 V3 #>3阿尔法1 33 36 43 V1 #>4 beta 1 21 33 45 V1 #尝试2 特里布尔( ~A,~Y,~V1,~V2,~V3, “一”,2,89,52,37, “两个”、3、45、34、86、, “阿尔法”,1,33,36,43, “贝塔”,1,21,33,45, ) %>% 突变(selectYCol=glue::glue(“V{Y}”)) #>#tibble:4 x 6 #>Y V1 V2 V3 selectYCol #> #>1一2 89 52 37 V2 #>2两个3 45 34 86 V3 #>3阿尔法1 33 36 43 V1 #>4 beta 1 21 33 45 V1,r,dplyr,R,Dplyr,在selectYCol中,我们需要列值,而不是列名。“V”是静态的,数字基于Y列 因此,selectYCol结果应该是52、86、33、21,分别来自V2、V3、V1、V1列 注意:有两个tibble(尝试)尝试用不同的方法来做相同的事情。您需要创建列名,就像使用粘贴一样,但您必须获取值,否则您将保留并使用列名。我们还可以使用rowwise让流程知道我们每次感兴趣的行: library(tidyverse) # Attempt 1 tribble( ~A, ~Y, ~V1, ~V2, ~V
注意:有两个tibble(尝试)尝试用不同的方法来做相同的事情。您需要创建列名,就像使用
粘贴
一样,但您必须获取值,否则您将保留并使用列名。我们还可以使用rowwise
让流程知道我们每次感兴趣的行:
library(tidyverse)
# Attempt 1
tribble(
~A, ~Y, ~V1, ~V2, ~V3,
"One", 2, 89, 52, 37,
"Two", 3, 45, 34, 86,
"alpha", 1, 33, 36, 43,
"beta", 1, 21, 33, 45,
) %>%
mutate(selectYCol = paste0("V", Y))
#> # A tibble: 4 x 6
#> A Y V1 V2 V3 selectYCol
#> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 One 2 89 52 37 V2
#> 2 Two 3 45 34 86 V3
#> 3 alpha 1 33 36 43 V1
#> 4 beta 1 21 33 45 V1
# Attempt 2
tribble(
~A, ~Y, ~V1, ~V2, ~V3,
"One", 2, 89, 52, 37,
"Two", 3, 45, 34, 86,
"alpha", 1, 33, 36, 43,
"beta", 1, 21, 33, 45,
) %>%
mutate(selectYCol = glue::glue("V{Y}"))
#> # A tibble: 4 x 6
#> A Y V1 V2 V3 selectYCol
#> <chr> <dbl> <dbl> <dbl> <dbl> <S3: glue>
#> 1 One 2 89 52 37 V2
#> 2 Two 3 45 34 86 V3
#> 3 alpha 1 33 36 43 V1
#> 4 beta 1 21 33 45 V1
您需要创建列名,就像使用paste
一样,但您必须获取值,否则只需保留并使用列名。我们还可以使用rowwise
让流程知道我们每次感兴趣的行:
library(tidyverse)
# Attempt 1
tribble(
~A, ~Y, ~V1, ~V2, ~V3,
"One", 2, 89, 52, 37,
"Two", 3, 45, 34, 86,
"alpha", 1, 33, 36, 43,
"beta", 1, 21, 33, 45,
) %>%
mutate(selectYCol = paste0("V", Y))
#> # A tibble: 4 x 6
#> A Y V1 V2 V3 selectYCol
#> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 One 2 89 52 37 V2
#> 2 Two 3 45 34 86 V3
#> 3 alpha 1 33 36 43 V1
#> 4 beta 1 21 33 45 V1
# Attempt 2
tribble(
~A, ~Y, ~V1, ~V2, ~V3,
"One", 2, 89, 52, 37,
"Two", 3, 45, 34, 86,
"alpha", 1, 33, 36, 43,
"beta", 1, 21, 33, 45,
) %>%
mutate(selectYCol = glue::glue("V{Y}"))
#> # A tibble: 4 x 6
#> A Y V1 V2 V3 selectYCol
#> <chr> <dbl> <dbl> <dbl> <dbl> <S3: glue>
#> 1 One 2 89 52 37 V2
#> 2 Two 3 45 34 86 V3
#> 3 alpha 1 33 36 43 V1
#> 4 beta 1 21 33 45 V1
tidyverse的另一种解决方案:
df %>%
nest(-A, -Y) %>%
mutate(selectYCol = map2(Y, data, ~{.y %>% pull(paste0("V", .x))})) %>%
unnest()
库(tidyverse)
特里布尔(
~A,~Y,~V1,~V2,~V3,
“一”,2,89,52,37,
“两个”、3、45、34、86、,
“阿尔法”,1,33,36,43,
“贝塔”,1,21,33,45,
)->df
df%%>%聚集(k,v,-A,-Y)%%>%
过滤器(0(“V”,Y)=k)%>%
选择(A,v)%>%
内部连接(df,by=“A”)
##一个tibble:4x6
#Y V1 V2 V3 v
#
#1一289523752
#2两个3 45 34 86 86
#3阿尔法1 33 36 43 33
#4 beta 121334521
另一种使用tidyverse的解决方案:
df %>%
nest(-A, -Y) %>%
mutate(selectYCol = map2(Y, data, ~{.y %>% pull(paste0("V", .x))})) %>%
unnest()
库(tidyverse)
特里布尔(
~A,~Y,~V1,~V2,~V3,
“一”,2,89,52,37,
“两个”、3、45、34、86、,
“阿尔法”,1,33,36,43,
“贝塔”,1,21,33,45,
)->df
df%%>%聚集(k,v,-A,-Y)%%>%
过滤器(0(“V”,Y)=k)%>%
选择(A,v)%>%
内部连接(df,by=“A”)
##一个tibble:4x6
#Y V1 V2 V3 v
#
#1一289523752
#2两个3 45 34 86 86
#3阿尔法1 33 36 43 33
#4 beta 121334521
有关几种方法及其效率的讨论,请参见本博客:有关几种方法及其效率的讨论,请参见本博客: