如何转换一个R!使用purrr或apply将data.frame转换为键/值列表
这里的新手。。。 想知道解决这个问题的最好方法是什么 我有一个像这样的data.frame,我从csv文件中读取如何转换一个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 <- 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"