更改列值而不是列名 库(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

更改列值而不是列名 库(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

在selectYCol中,我们需要列值,而不是列名。“V”是静态的,数字基于Y列

因此,selectYCol结果应该是52、86、33、21,分别来自V2、V3、V1、V1列


注意:有两个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

有关几种方法及其效率的讨论,请参见本博客:有关几种方法及其效率的讨论,请参见本博客: