R 将一列中的值连接到另一列的值唯一之后

R 将一列中的值连接到另一列的值唯一之后,r,dplyr,tibble,R,Dplyr,Tibble,我有一个tibble,看起来像这样: library(tidyverse) df <- tibble(table_name = c("horse", "x", "x", "x", "dog", "x", "rat", "x", "x", "x", "x", "x"), value_str = c(NA, "a", "b", "c", NA, "a", NA, "b", "d", "e", "f", "g")) 我会对df$table\u name执行group

我有一个tibble,看起来像这样:

library(tidyverse)

df <- tibble(table_name = c("horse", "x", "x", "x", "dog", "x", "rat", "x", "x", "x", "x", "x"),
             value_str = c(NA, "a", "b", "c", NA, "a", NA, "b", "d", "e", "f", "g"))
我会对
df$table\u name
执行
group\u by()
,但在本例中不起作用,因为它是关于
df$value\u str的值的位置的

我无法将
df$value\u str
折叠成单个向量,因为输出需要是
df$table\u name
中每个唯一类别的单独向量


提前谢谢

如果要在全局环境中创建三个对象,则有一个选项(不推荐)

d = df %>%
    mutate(table_name = if_else(table_name == "x", NA_character_, table_name)) %>%
    fill(table_name) %>%
    group_by(table_name) %>%
    summarise(value_str = list(unique(value_str[!is.na(value_str)]))) %>%
    ungroup()

setNames(d$value_str, d$table_name)

lst1这起作用了——在这件事发生后,我唯一需要改变的是删除逗号并拆分字符串,结果是
value\u str
。为此,我添加了:
mutate(value\u str=str\u remove\u all(value\u str,“,”)%%>%slice(1)%%>%pull(2)%%>%strsplit(,,”)%%>%unlist()
。在本例中,我的输出就是“horse”的值。现在,我将循环使用它来为“马”、“鼠”、“狗”创建单独的字符串向量。如果你对这最后一部分有不同的看法,我很乐意听到。
vec_horse <- tibble(horse = c("a", "b", "c")) %>% pull(., horse)
vec_dog <- tibble(dog = c("a")) %>% pull(., dog)
vec_rat <- tibble(rat = c("b", "d", "e", "f", "g")) %>% pull(., rat)
    > vec_horse
    [1] "a" "b" "c"
d = df %>%
    mutate(table_name = if_else(table_name == "x", NA_character_, table_name)) %>%
    fill(table_name) %>%
    group_by(table_name) %>%
    summarise(value_str = list(unique(value_str[!is.na(value_str)]))) %>%
    ungroup()

setNames(d$value_str, d$table_name)
lst1 <- lapply(split(df$value_str, paste0("vec_", 
   zoo::na.locf(replace(df$table_name,  df$table_name== "x", NA)))), 
        function(x) unique(na.omit(x))) 
list2env(lst1, .GlobalEnv)
vec_dog
#[1] "a"
vec_horse
#[1] "a" "b" "c"
vec_rat
#[1] "b" "d" "e" "f" "g"