gpt4 book ai didi

r - 将数据框的部分转置为单独的列

转载 作者:行者123 更新时间:2023-12-03 21:36:47 25 4
gpt4 key购买 nike

我是 R 的新手并且有点挣扎。我有一个这样的数据框

reg     12345
val1 1
val2 0
reg 45678
val1 0
val2 0
val3 1
reg 97654
val1 1
reg 567834
val3 1
reg 567845
val2 0
val4 1

我的目标是将数据转换成这种格式

 reg     val1    val2    val3    val4
12345 1 0 0 0
45678 0 0 1 0
97654 1 0 0 0
567834 0 0 1 0
567845 0 0 0 1

希望有人能在这里指导我。我的数据源少于 200 行,并且对方法没有任何限制。请假设机器运行有足够的内存和处理能力。

最佳答案

即使这是重复的,我也没有看到下面的答案,所以...从原始数据开始:

df <- data.frame( A = c("reg","val1","val2","reg","val1","val2","val3","reg","val1","reg","val3","reg","val2","val4"),
B = c(12345, 1, 0, 45678, 0, 0, 1, 97654, 1, 567834, 1, 567845, 0, 1))

我使用 tidyverse 动词,并使用 cumsum 向每个 "reg" 组添加标签(在 dummy 中) :

install.packages("tidyverse")
library(tidyverse)
df1 <- df %>%
mutate(dummy = cumsum(A=="reg")) %>%
group_by(dummy) %>%
nest() %>%
mutate(data = map(data, ~spread(.x, A, B))) %>%
unnest() %>%
select(-dummy)

这导致:

     reg  val1  val2  val3  val4
1 12345 1 0 NA NA
2 45678 0 0 1 NA
3 97654 1 NA NA NA
4 567834 NA NA 1 NA
5 567845 NA 0 NA 1

我更愿意保留 NA,但如果您不这样做:

df1[is.na(df1)] <- 0

reg val1 val2 val3 val4
1 12345 1 0 0 0
2 45678 0 0 1 0
3 97654 1 0 0 0
4 567834 0 0 1 0
5 567845 0 0 0 1

关于r - 将数据框的部分转置为单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913643/

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