r - 带有 map_df 的数据框列表正在移动行
问题描述
我的数据输出是一个包含参与者数据嵌套列表的列表。
- 因此,一个列表将包含参与者 1 到 5,例如
- 在该列表中,参与者 1 将有 2 天的数据,参与者 2 可能有 5 天的数据(嵌套列表),等等。
DF = list(list(list(0.601705399641698)), list(list(1.0967226417789),
list(1.18794820947846), list(3.98557480186904)), list(list(
0.995996328131446), list(0.564513260465204), list(1.31356753668681),
list(0.891872221784271)), list(list(0.649008813684839), list(
1.0036615512612), list(NA_real_)), list(list(0.828273303379322)))
当我使用 map_df 来组合这些列表时,它会像这样移动行:
xtest = map_df(DF, ~as.data.frame(.x), .null = NA)
# which comes out like this
structure(list(X0.601705399641698 = c(0.601705399641698, NA,
NA, NA, NA), X1.0967226417789 = c(NA, 1.0967226417789, NA, NA,
NA), X1.18794820947846 = c(NA, 1.18794820947846, NA, NA, NA),
X3.98557480186904 = c(NA, 3.98557480186904, NA, NA, NA),
X0.995996328131446 = c(NA, NA, 0.995996328131446, NA, NA),
X0.564513260465204 = c(NA, NA, 0.564513260465204, NA, NA),
X1.31356753668681 = c(NA, NA, 1.31356753668681, NA, NA),
X0.891872221784271 = c(NA, NA, 0.891872221784271, NA, NA),
X0.649008813684839 = c(NA, NA, NA, 0.649008813684839, NA),
X1.0036615512612 = c(NA, NA, NA, 1.0036615512612, NA), NA_real_. = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_), X0.828273303379322 = c(NA,
NA, NA, NA, 0.828273303379322)), row.names = c(NA, -5L), class = "data.frame")
X0.601705399641698 X1.0967226417789 X1.18794820947846 X3.98557480186904 X0.995996328131446 X0.564513260465204 X1.31356753668681 X0.891872221784271
1 0.6017054 NA NA NA NA NA NA NA
2 NA 1.096723 1.187948 3.985575 NA NA NA NA
3 NA NA NA NA 0.9959963 0.5645133 1.313568 0.8918722
4 NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA
X0.649008813684839 X1.0036615512612 NA_real_. X0.828273303379322
1 NA NA NA NA
2 NA NA NA NA
3 NA NA NA NA
4 0.6490088 1.003662 NA NA
5 NA NA NA 0.8282733
它似乎是按列添加数据,并移动新值,而不是从参与者 2 的第 1 列第 2 行开始,依此类推。
有没有办法将 map_df 数据框输出更改为从第 1 列开始,但保留与每个参与者对应的行?
预期输出:
1 2 3 4
1 0.6017054 NA NA NA # participant 1
2 1.096723 1.187948 3.985575 NA # participant 2
3 0.9959963 0.5645133 1.313568 0.8918722 # participant 3
4 0.6490088 1.003662 NA NA # Participant 4
5 0.8282733 NA NA NA # Participant 5
解决方案
一种tidyverse
方法
library(tidyverse)
map_dfr(DF, ~unlist(.x) %>% t() %>% as.data.frame())
# V1 V2 V3 V4
#1 0.6017054 NA NA NA
#2 1.0967226 1.1879482 3.985575 NA
#3 0.9959963 0.5645133 1.313568 0.8918722
#4 0.6490088 1.0036616 NA NA
#5 0.8282733 NA NA NA
或者同样使用data.table
library(data.table)
rbindlist(lapply(DF, function(x) data.table(t(unlist(x)))), fill = TRUE)
# V1 V2 V3 V4
#1: 0.6017054 NA NA NA
#2: 1.0967226 1.1879482 3.985575 NA
#3: 0.9959963 0.5645133 1.313568 0.8918722
#4: 0.6490088 1.0036616 NA NA
#5: 0.8282733 NA NA NA
推荐阅读
- wpf - wpf DocumentViewer XPS捏以使用触摸进行缩放和滚动
- android - 继续使用数据绑定更新视图
- java - 方法不适用于数组的所有元素
- php - Laravel,我可以在发出 oauth 令牌(护照)后自动注销(或)清除会话吗
- data-collection - 一个作业的多个数据收集器,无需在流集中复制记录
- sql - 将所有选定的列合并为一列
- python - 多个标题,而我只想有一个标题
- mongodb - 如何访问 MongoDB 中的第 N 级子文档
- javascript - 反应路由器和 setState 冲突
- react-native - 无法同时在模拟器和真实设备上运行 react-native 应用程序