gpt4 book ai didi

r - 将数据从一个数据帧提取到另一个具有不同行长的数据帧

转载 作者:行者123 更新时间:2023-12-04 10:38:23 25 4
gpt4 key购买 nike

我有两个data.frames如下:

df1 <- data.frame(A=c("lee","eeu","ees"), B=c("lee","ggu","1su"), C=c(1,1,1)

A B C
1 lee lee 1
2 eeu ggu 1
3 ees 1su 1


df2 <- data.frame (X=c("lee","1su","eeu","ggu"), Y=c("3k3","4k4","5k","2ee"), Z=c("ggg","","","ooo"), ZA=c("vvv","","",""))

X Y Z ZA
1 lee 3k3 ggg vvv
2 1su 4k4
3 eeu 5k
4 ggu 2ee ooo

我想通过将 df1$B 与 df2$X 匹配来扩展 df1。当 df1$B = df2$X 时,我想在 new_df1 中添加额外的行,新 B = df2 中的其他条目在同一行,但保持 A 和 C 相同。

new_df1 预计如下:

 A   B  C
lee 3k3 1 ### df1$B1= df2$X1= lee
lee ggg 1
lee vvv 1
eeu 2ee 1 ### df1$B2= df2$X4= ggu
eeu ooo 1
ees 4k4 1 ### df1$B3= df2$X2= lsu

我过去使用 lapply 的经验似乎非常需要内存,是否可以不使用 lapply 来完成?

最佳答案

我认为你想要的是这个的一个子集:

require(reshape2)
merge(df1,melt(df2, id.var="X"), by.x="B", by.y="X", all=TRUE)
B A C variable value
1 1su ees 1 Y 4k4
2 1su ees 1 Z
3 1su ees 1 ZA
4 ggu eeu 1 Y 2ee
5 ggu eeu 1 Z ooo
6 ggu eeu 1 ZA
7 lee lee 1 Y 3k3
8 lee lee 1 Z ggg
9 lee lee 1 ZA vvv
10 eeu <NA> NA Y 5k
11 eeu <NA> NA Z
12 eeu <NA> NA ZA

我将该对象分配给“M1”(后来注意到它不需要 all=TRUE)

M1 <- merge(df1,melt(df2, id.var="X"), by.x="B", by.y="X")
subset(M1, value != "" , select=c(A,value, C) )
A value C
1 ees 4k4 1
4 eeu 2ee 1
5 eeu ooo 1
7 lee 3k3 1
8 lee ggg 1
9 lee vvv 1

关于r - 将数据从一个数据帧提取到另一个具有不同行长的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352641/

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