gpt4 book ai didi

r - 创建一个虚拟变量列来指示记录是否位于第二个数据帧中?

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

我有两个数据帧,df1 和 df2,采用这样的格式(最后用于数据输入的可重现代码):

df1
#> name instrument
#> 1 John Lennon guitar
#> 2 Mick Jagger vocals
#> 3 Ringo Starr drums
#> 4 Keith Richards guitar

df2
#> name beatles
#> 1 John Lennon 1
#> 2 Ringo Starr 1
#> 3 George Harrison 1
#> 4 Paul McCartney 1

我想向 df1 添加一列,指示记录是否也在 df2 中(如果没有则等于 0),所以我想要的输出是:

output
#> name instrument beatles
#> 1 John Lennon guitar 1
#> 2 Mick Jagger vocals 0
#> 3 Ringo Starr drums 1
#> 4 Keith Richards guitar 0

我已经尝试过 full_join(),但这会跨过 df2 中不在 df1 中的行,这不是我想要的。 (即 George Harrison 和 Paul McCartney 行不应出现在输出中)


library(tidyverse)

df1 %>%
full_join(df2)

#> Joining, by = "name"
#> name instrument beatles
#> 1 John Lennon guitar 1
#> 2 Mick Jagger vocals NA
#> 3 Ringo Starr drums 1
#> 4 Keith Richards guitar NA
#> 5 George Harrison <NA> 1
#> 6 Paul McCartney <NA> 1

可重现的代码如下:

df1 <- data.frame(stringsAsFactors=FALSE,
name = c("John Lennon", "Mick Jagger", "Ringo Starr", "Keith Richards"),
instrument = c("guitar", "vocals", "drums", "guitar")
)

df2 <- data.frame(stringsAsFactors=FALSE,
name = c("John Lennon", "Ringo Starr", "George Harrison",
"Paul McCartney"),
beatles = c(1, 1, 1, 1)
)

library(tidyverse)

df1 %>%
full_join(df2)

最佳答案

df1$beatles <- ifelse(df1$name %in% df2$name, 1, 0)

name instrument beatles
1 John Lennon guitar 1
2 Mick Jagger vocals 0
3 Ringo Starr drums 1
4 Keith Richards guitar 0

或者,如果 df2 中还有其他乐队,您可以这样做:

df1$beatles <- ifelse(df1$name %in% df2[df2$beatles == 1,]$name, 1, 0)

关于r - 创建一个虚拟变量列来指示记录是否位于第二个数据帧中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039050/

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