我有三个数据框,我已将它们合并到一个列表中
d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
d3 <- data.frame(y1 = c(5, 7, 8),y2 = c(6, 4, 2))
my.list <- list(d1, d2,d3)
我想提取列表中每个元素的第一行,将它们按行绑定并保存为csv文件。
例如,在上面的示例中,我想从d1
,d2
和d3
row1.d1 <- c(1,4)
row1.d2 <- c(3,6)
row1.d3 <- c(5,6)
并将它们绑定在一起
dat <- rbind(row1.d1,row1.d2,row1.d3)
dat
row1.d1 1 4
row1.d2 3 6
row1.d3 5 6
并为所有行重复。
如果我有一个向量列表,我找到了一种方法,
A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)
A[[3]]=c(5,6)
sapply(A,'[[',1)
但是对于数据帧,我不知道如何去做。
答案 0 :(得分:3)
另一种方式如下。您浏览my.list
中的每个数据框,并获得lapply()
的第一行。然后绑定结果。
do.call(rbind, (lapply(my.list, function(x) x[1,])))
# y1 y2
#1 1 4
#2 3 6
#3 5 6
答案 1 :(得分:2)
我们需要在,
1
t(sapply(my.list, `[`, 1, ))
答案 2 :(得分:1)
下面是tidyverse
/ FP解决方案。我添加了id
和df
以分别保留有关行号和来源的信息。
# your data
d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
d3 <- data.frame(y1 = c(5, 7, 8),y2 = c(6, 4, 2))
my.list <- list(d1, d2,d3)
# tidyverse/ FP solution
library(dplyr)
library(purrr)
library(readr)
map_df(.x = seq(1:3),
.f = function(x) bind_rows(my.list[x]) %>%
mutate(id = row_number(),
df = x)) %>%
arrange(id) %>%
#select(-id, -df) %>% # uncomment if you want to lose row num and source
write_csv(path = 'yourfile.csv')