如何将 R! data.frame 转换为带有咕噜声或应用的键/值列表

  • 本文关键字:应用 列表 data frame 转换 r purrr
  • 更新时间 :
  • 英文 :


>新手在这里... 想知道解决这个问题的最佳方法是什么

我有一个这样的数据帧,我从csv文件中读取

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

我想要以下结果

result <- c(
"id11"="name1",
"id12"="name1",
"id13"="name1",
"id21"="name2",
"id31"="name3",
"id41"="name4",
"id42"="name4")

我想知道最简单的解决方案是执行应用(但是什么功能(还是应该查看咕噜声(如果是这样,什么功能会对我有所帮助?

谢谢

这是一个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

您可以使用逐行apply。从行中删除所有空值。根据非空值的length重复第一个值并指定名称。

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" 

最新更新