我需要一种更灵活的方法来将多个列中的值提取到“y”列中,其中“x”中的最后一个字符==列名称的最后一个字符。我可以使用嵌套来实现此目的ifelse(),但列总数未知。
有多个以相同整数结尾的列名称,因此我预计需要一个字符串前缀。在下面的示例中,我对“a”列感兴趣。
在这个阶段,我更喜欢保留原始列顺序的字符串匹配方法,但对“a”列重新排序的列索引方法也很有趣。我进行了搜索,但找不到我可以适应的解决方案。
library(dplyr)
library(stringr)
# Sample data
df <- data.frame(a2 = c(rep(letters[1:2], 2), "a"),
a3 = c(rep(letters[2:1], 2), "a"),
a1 = c(rep(letters[1:2], each = 2), "a"),
b1 = 1:5,
b2 = 6:10,
x = paste0("x", c(1,2,2,3,4)))
# Inflexible approach
df %>% mutate(y = ifelse(str_sub(x, start = -1) == 1, a1,
ifelse(str_sub(x, start = -1) == 2, a2,
ifelse(str_sub(x, start = -1) == 3, a3, NA))))
# Result
a2 a3 a1 b1 b2 x y
1 a b a 1 6 x1 a
2 b a a 2 7 x2 b
3 a b b 3 8 x2 a
4 b a b 4 9 x3 a
5 a a a 5 10 x4 <NA>
Run Code Online (Sandbox Code Playgroud)
这与韩一夫对链接问题的回答类似/等效:
df |> mutate(y = imap(x, ~df[.y, str_replace(.x, "x", "a")] %>% ifelse(is.null(.), NA, .)))
Run Code Online (Sandbox Code Playgroud)