使用lapply从数据框列表中创建新的数据框

3
我有一个数据帧列表。每个列表都包含两列“名称”和“代码”。
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
  1. 我想创建一个新的数据框"NEW",其中包含所有唯一的名称和代码,以便得到如下结果:

    名称 代码 AAA 123 AAB 124 AAC 125 BBB 456 BBA 457 BBC 458 CCC 789

  2. 在得到"NEW"之后,我想将数据框列表与"NEW"进行比较,并说明每个名称是否存在于一个列表中。 我想将新列(用列表中的数据框名称命名)添加到"NEW"数据框中,并在存在的情况下加上“Yes”或“no”。

因此得到如下结果

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完成一些操作,但我不确定如何做。

你能帮助我吗?

2个回答

1

使用data.table将行与ID绑定,然后从长格式转换为宽格式:

# 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

0

使用基本的R语言,我们可以创建一个数据框列表,并使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接