如何转换一个R!使用purrr或apply将data.frame转换为键/值列表

如何转换一个R!使用purrr或apply将data.frame转换为键/值列表,r,purrr,R,Purrr,这里的新手。。。 想知道解决这个问题的最好方法是什么 我有一个像这样的data.frame,我从csv文件中读取 data <- data.frame( V1=c("name1","name2","name3","name4"), V2=c("id11","id21","id31","id41"), V3=c("

这里的新手。。。 想知道解决这个问题的最好方法是什么

我有一个像这样的data.frame,我从csv文件中读取

data <- data.frame(
  V1=c("name1","name2","name3","name4"),
  V2=c("id11","id21","id31","id41"),
  V3=c("id12","","","id42"),
  V4=c("id13","","","")
)

data这里有一个
tidyverse
/
dplyr
解决方案:

library(dplyr)
data %>% 
  pivot_longer(-V1) %>% 
  filter(value != "") %>% 
  pivot_wider(names_from = value, values_from = V1) %>% 
  fill(id11:id42, .direction = "updown") %>% 
  select(-name) %>% 
  distinct()
这给了我们:

# A tibble: 1 x 7
  id11  id12  id13  id21  id31  id41  id42 
  <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 name1 name1 name1 name2 name3 name4 name4
#一个tible:1 x 7
id11 id12 id13 id21 id31 id41 id42
1姓名1姓名1姓名1姓名2姓名3姓名4姓名4

您可以使用行方式
应用
。从行中删除所有空值。根据非空值的
长度
重复第一个值,并指定名称

unlist(apply(data, 1, function(x) {
        name <- x[-1][x[-1] != '']
        setNames(rep(x[1], length(name)), name)
}))

#  id11    id12    id13    id21    id31    id41    id42 
#"name1" "name1" "name1" "name2" "name3" "name4" "name4" 
unlist(应用(数据,1,函数(x)){
名称
unlist(apply(data, 1, function(x) {
        name <- x[-1][x[-1] != '']
        setNames(rep(x[1], length(name)), name)
}))

#  id11    id12    id13    id21    id31    id41    id42 
#"name1" "name1" "name1" "name2" "name3" "name4" "name4"