我有数据帧A,B,C,并希望根据数据帧D以相同的方式修改每个数据帧。就像:
A = data.frame(x=c('a','b','c','d','e','f'),type=c('1','2','3','2','1','3'))
B = data.frame(x=c('g','h','i') ,type=c('1','2','3'))
C = data.frame(x=c('j','k','l','m'),type=c('2','3','1','2') )
D = data.frame(type=c('1','2','3','4'),newtype=c('I','II','III','IV') )
首先,我想将A,B,C中的类型更改为D中的新类型。 对于A,我可以这样做:
A$type <- D$newtype[match(A$type, D$type)]
现在如何在B和C上执行相同的功能?我查看了其他问题,并认为应该使用lapply来实现,但我无法正确编写。
答案 0 :(得分:1)
我会将A
,B
,C
存储在list
中,然后将data.frame
的{{1}}条目与{{1} }。
使用D
和type
purrr::map
在基数R中使用dplyr::left_join
和library(purrr)
library(dplyr)
map(list(A, B, C), ~left_join(.x, D))
#[[1]]
# x type newtype
#1 a 1 I
#2 b 2 II
#3 c 3 III
#4 d 2 II
#5 e 1 I
#6 f 3 III
#
#[[2]]
# x type newtype
#1 g 1 I
#2 h 2 II
#3 i 3 III
#
#[[3]]
# x type newtype
#1 j 2 II
#2 k 3 III
#3 l 1 I
#4 m 2 II
Map
答案 1 :(得分:1)
“从字面上看”我认为应该是这样的:
A = data.frame(x=c('a','b','c','d','e','f'),type=c('1','2','3','2','1','3'))
B = data.frame(x=c('g','h','i') ,type=c('1','2','3'))
C = data.frame(x=c('j','k','l','m'),type=c('2','3','1','2') )
D = data.frame(type=c('1','2','3','4'),newtype=c('I','II','III','IV') )
list2env(
lapply(list(A = A, B = B, C = C), function(x) {
x$type <- D$newtype[match(x$type, D$type)]
x
}),
envir = parent.frame())
# A
# x type
#1 a I
#2 b II
#3 c III
#4 d II
#5 e I
#6 f III