我有一个数据帧列表。每个列表包含两列“名称”和“代码”
A
Name Code
AAA 123
BBB 456
CCC 789
B
Name Code
AAA 123
AAB 124
AAC 125
C
Name Code
BBB 456
BBA 457
BBC 458
我想创建一个包含所有唯一名称和代码的新数据框“ NEW”,以便获得
名称代码 AAA 123 AAB 124 瑞声125 BBB 456 英国广播公司457 英国广播公司458 CCC 789
具有“ NEW”之后,我想将数据帧列表与“ NEW”进行比较,并说出每个名称是否出现在一个列表中。 我想将新列(列表中数据框的名称)添加到“ NEW”数据框,并在可能的情况下输入是或否。
所以得到这个
Name Code A B C
AAA 123 YES YES NO
AAB 124 NO YES NO
AAC 125 NO YES NO
BBB 456 YES NO YES
BBA 457 No NO YES
BBC 458 NO NO YES
CCC 789 YES NO NO
我想使用lapply
,但不确定如何做。
你能帮我吗
答案 0 :(得分:1)
绑定具有ID的行,然后使用 data.table 从长到宽整形:
# example data
myList <- list(A = data.frame(x = 1:3),
B = data.frame(x = 2:4),
C = data.frame(x = 4:6))
library(data.table)
dcast(rbindlist(myList, idcol = "ID"), x ~ ID)
# x A B C
# 1: 1 1 NA NA
# 2: 2 2 2 NA
# 3: 3 3 3 NA
# 4: 4 NA 4 4
# 5: 5 NA NA 5
# 6: 6 NA NA 6
答案 1 :(得分:0)
使用基数R,我们可以创建数据帧列表,并使用merge
将它们Reduce
一起使用。对于每个列表,我们检查新合并的数据帧(df_merge
)中是否存在该值,并根据它们的存在/不存在来分配值“是”,“否”。
list_name <- mget(c("A", "B", "C"))
df_merge <- Reduce(function(x, y) merge(x, y, all = TRUE), list_name)
df_merge[names(list_name)] <- lapply(list_name, function(x)
c("No", "Yes")[(df_merge$Name %in% x$Name + 1)])
df_merge
# Name Code A B C
#1 AAA 123 Yes Yes No
#2 BBB 456 Yes No Yes
#3 CCC 789 Yes No No
#4 AAB 124 No Yes No
#5 AAC 125 No Yes No
#6 BBA 457 No No Yes
#7 BBC 458 No No Yes