gpt4 book ai didi

r - 将行扁平化为一行,其中每列只有一个值,并与相似的结果数据框垂直组合

转载 作者:行者123 更新时间:2023-12-04 10:54:56 26 4
gpt4 key购买 nike

我有两个数据框:

Harry <- c(1, NA, NA, NA)
Tom <- c(NA, 2, NA, NA)
Sally <- c(NA, NA, 3, NA)
Jane <- c(NA, NA, NA, 4)

df <- data.frame(Harry, Tom, Sally, Jane)

Harry <- c(1, NA, NA, NA)
Tom <- c(1, NA, NA, NA)
Mary <- c(NA, NA, 3, NA)
Sarah <- c(NA, NA, NA, 4)

df2 <- data.frame(Harry, Tom, Mary, Sarah)

... 每列只有一个值。我想将数据帧展平为单行,然后垂直连接,使每个数据帧成为新帧中的观察值。可能有不同的列,在这种情况下会添加这些列,因此我不能使用 rbind。

此外,由于这些是数字,因此 NA 应为零,结果帧如下所示:

Harry <- c(1, 1)
Tom <- c(2, 1)
Sally <- c(3, 0)
Jane <- c(4, 0)
Mary <- c(0, 3)
Sarah <- c(0, 4)

df <- data.frame(Harry, Tom, Sally, Jane, Mary, Sarah)

我意识到我可以将所有内容都设为数字和总计以获取每一行,但我的问题是将其放入单个对象中。

最佳答案

我们可以使用 dplyrtidyr 中的 gatherspread 方法。

library(dplyr)
library(tidyr)

df_2 <- df %>% gather(Col, Val, na.rm = TRUE)

df2_2 <- df2 %>% gather(Col, Val, na.rm = TRUE)

df3 <- bind_rows(df_2, df2_2, .id = "ID") %>%
spread(Col, Val, fill = 0) %>%
select(-ID)

df3
# Harry Jane Mary Sally Sarah Tom
# 1 1 4 0 3 0 2
# 2 1 0 3 0 4 1

关于r - 将行扁平化为一行,其中每列只有一个值,并与相似的结果数据框垂直组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47228297/

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