gpt4 book ai didi

r - dplyr::mutate new columns based on a second (filtered) dataframe

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

我有 2 个数据框:

df1:

a
s1
s2
s3
s4

df2:

a    b
s1 w
s1 x
s4 y
s2 z
s4 x

我想将与 df2$b(w、x、y、z)中的唯一值一样多的列附加到 df1,如果 df2$a 有一行关联,则为每个 df1$a 和新列添加一个 1他们。这解释起来很麻烦,也许显示所需的输出会更好:

a    w    x    y    z
s1 1 1 0 0
s2 0 0 0 1
s3 0 0 0 0
s4 0 1 1 0

我试过了

for (col_name in unique(df2$b)){
df1 %<>%
mutate(!!as.character(col_name) := ifelse(col_name %in% filter(df2,
a == df1$a)$b,
yes = 1,
no = 0))
}

但是这样不行,我猜问题出在

a == df1$a

有点,但我不知道哪个是正确的语法。感谢您的帮助!

最佳答案

我们可以在 base R 中使用 table(假设我们想要 'df1' 中 'a' 列的所有值的行,将 'a' 'df2' 的列到 factorlevels 指定为 'df1' 的 'a' 的 unique values

table(transform(df2, a = factor(a, levels = unique(df1$a))))

-输出

# b
#a w x y z
# s1 1 1 0 0
# s2 0 0 0 1
# s3 0 0 0 0
# s4 0 1 1 0

数据

df1 <- structure(list(a = c("s1", "s2", "s3", "s4")), class = "data.frame",
row.names = c(NA,
-4L))

df2 <- structure(list(a = c("s1", "s1", "s4", "s2", "s4"), b = c("w",
"x", "y", "z", "x")), class = "data.frame", row.names = c(NA,
-5L))

关于r - dplyr::mutate new columns based on a second (filtered) dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65099304/

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