gpt4 book ai didi

r - R中的数据匹配

转载 作者:行者123 更新时间:2023-12-01 12:20:39 25 4
gpt4 key购买 nike

我有两个具有相同长度 (1000) 和宽度 (200) 的数据帧。在这两个数据框中,每一行都是一个人。在一个数据框中,每一列都是一个二进制项目分数(即 0 或 1)。在另一个数据框中,每一列都是项目标签。这是它:

数据框 1:

item1 item2 item3
0 1 1
1 0 0
1 1 1

数据框 2:

item1   item2   item3
C2HSD WW11S3 EI22S
WW11S3 2JDDS TT6SQ1
EI22S TT6SQ1 331ID

我想要的是这样一个组合和匹配的数据框:

C2HSD  WW11S3 EI22S 2JDDS TT6SQ1 331ID
0 1 1 NA NA NA
NA 1 NA 0 0 NA
NA NA 1 NA 1 1

谢谢!

最佳答案

我们可以melt将两个数据集转换为“长格式”,执行 left_join , 后来 spread删除“Var2”后将其转换为“宽”格式

library(reshape2)
library(tidyverse)
d1 <- melt(as.matrix(df1))
d2 <- melt(as.matrix(df2))
left_join(d2, d1, by = c("Var1", "Var2")) %>%
select(-Var2) %>%
spread(value.x, value.y) %>%
select(-Var1)
# 2JDDS 331ID C2HSD EI22S TT6SQ WW11S
#1 NA NA 0 1 NA 1
#2 0 NA NA NA 0 1
#3 NA 1 NA 1 1 NA

A base R选项是 replace 'df2' 的相应列值与 NA 其中 'df1' 值为 0 使用 Map , 然后 stack它到'data.frame',transform “值”列到 factor并使用 table 获取频率

un1 <- unique(unlist(df2))
table(transform(stack(Map(function(x,y) replace(y, !x, NA),
df1, df2))[2:1], values = factor(values, levels = un1)))

关于r - R中的数据匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com