我有两个要合并的数据帧列表,但是它们具有不同的行数,因此我想获取列表中每个数据帧的前四行,以便能够合并它们。
我尝试了几件事,但希望不高,因此不胜感激。
这是我想要的例子:
hitID Data Time hitID Data Time
1 A 2 1 A 2
2 B 3 2 B 3
3 C 4 3 C 4
4 D 5
谢谢您的帮助,这是我的数据,每个列表看起来都像这样: enter image description here enter image description here 如您所见,有些数据框只有4行。我的目的是使数据组合在一起,这样我就可以得到驾驶员一个人名的数据,然后在同一行上得到熨斗中相同人名的数据。这意味着我最终得到的数据帧列表与上面的类似,但是可以从中选择重要数据的列增加了一倍。我不介意这是否意味着失去第5行。
答案 0 :(得分:1)
您可以使用Reduce
将merge
应用于列表中的子集数据帧。
Reduce(function(...) merge(..., all=TRUE), lapply(l, function(x) x[1:4, ]))
# X1 X2 X3
# 1 1 1 1
# 2 1 1 1
# 3 1 1 1
# 4 1 1 1
# 5 2 2 2
# 6 2 2 2
# 7 2 2 2
# 8 2 2 2
# 9 3 3 3
# 10 3 3 3
# 11 3 3 3
# 12 3 3 3
数据:
dat1 <- data.frame(matrix(1, 6, 3))
dat2 <- data.frame(matrix(2, 4, 3))
dat3 <- data.frame(matrix(3, 5, 3))
l <- list(dat1, dat2, dat3)
答案 1 :(得分:1)
我们可以使用Map
遍历两个list
,在head
s中获取每个数据集的list
的前4行,然后执行{ {1}}
merge
如果只有一个Map(function(dat1, dat2) merge(head(dat1, 4), head(dat2, 4),
by = c('hitID')), lst1, lst2)
,那么使用list
的方法就是
tidyverse
答案 2 :(得分:0)
我无法看到您的数据,因为打印质量不好,所以我正在创建一些数据,您告诉它是否有帮助:
library(dplyr)
# Creating data
Ages = data.frame(names = c("John",
"Claire",
"Steve",
"Pete"),
Age = c(31, 25, 17, 42))
Jobs = data.frame(names = c("Harry",
"Thomas",
"Steve",
"Pete",
"John",
"Claire"),
job = c("Economist",
"Lawyer",
"Driver",
"Salesman",
"Banking",
"Physician"))
# Resulting data frame
Ages
#> names Age
#> 1 John 31
#> 2 Claire 25
#> 3 Steve 17
#> 4 Pete 42
Jobs
#> names job
#> 1 Harry Economist
#> 2 Thomas Lawyer
#> 3 Steve Driver
#> 4 Pete Salesman
#> 5 John Banking
#> 6 Claire Physician
# Merge only lines that are present in both data frames
data = Ages %>% inner_join(Jobs, by = c("names" = "names"))
data
#> names Age job
#> 1 John 31 Banking
#> 2 Claire 25 Physician
#> 3 Steve 17 Driver
#> 4 Pete 42 Salesman
# Keep all lines in Job data frame and merge ones found in Ages data frame
data = Ages %>% right_join(Jobs, by = c("names" = "names"))
data
#> names Age job
#> 1 John 31 Banking
#> 2 Claire 25 Physician
#> 3 Steve 17 Driver
#> 4 Pete 42 Salesman
#> 5 Harry NA Economist
#> 6 Thomas NA Lawyer
由reprex package(v0.3.0)于2020-06-04创建