gpt4 book ai didi

r - 将合并中的后缀扩展到所有非按列

转载 作者:行者123 更新时间:2023-12-04 03:11:56 24 4
gpt4 key购买 nike

suffixesmerge仅适用于常见的列名。无论如何,是否可以将其扩展到其余的列,而无需在合并之前手动更新列?

那是 -

df1 <- data.table(
a = c(1,2,3,4,5,6),
b = c('a','b','f','e','r','h'),
d = c('q','l','o','n','q','z')
)

df2 <- data.table(
a = c(1,2,3,4,5,6),
d = c('q','l','o','n','q','z')
)

colnames(merge(df1,df2, by = 'a', suffixes = c("1","2")))
#[1] "a" "b" "d1" "d2" what it does
#[1] "a" "b1" "d1" "d2" what I'd like it to do

我目前处理这个问题的方式类似于@mrip 的回答。
df1 <- data.table(
a = c(1,2,3,4,5,6),
b = c('a','b','f','e','r','h'),
r = c('a','b','f','e','r','h'),
d = c('q','l','o','n','q','z')
)

df2 <- data.table(
a = c(1,2,3,4,5,6),
c = c('a','b','f','e','r','h'),
q = c('a','b','f','e','r','h'),
d = c('q','l','o','n','q','z')
)

dfmerge <- (merge(df1,df2, by = c("a"), suffixes = c("1","2")))

setnames(
dfmerge,
setdiff(names(df1),names(df2)),
paste0(setdiff(names(df1),names(df2)),"1")
)

setnames(
dfmerge,
setdiff(names(df2),names(df1)),
paste0(setdiff(names(df2),names(df1)),"2")
)

colnames(dfmerge)
#[1] "a" "b1" "r1" "d1" "c2" "q2" "d2"

最佳答案

一个简单的解决方案:

mrg<-(merge(df1,df2, by = 'a', suffixes = c("1","2")))
setnames(mrg,paste0(names(mrg),ifelse(names(mrg) %in% setdiff(names(df1),names(df2)),"1","")))
setnames(mrg,paste0(names(mrg),ifelse(names(mrg) %in% setdiff(names(df2),names(df1)),"2","")))

> names(mrg)
[1] "a" "b1" "d1" "d2"

编辑:感谢里卡多·萨波尔塔 (Ricardo Saporta) 的评论,他对此进行了大量清理并教了我一些新技巧!

关于r - 将合并中的后缀扩展到所有非按列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142019/

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