gpt4 book ai didi

r - R 中的 Dcast 或 Reshape 数据框

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

我有一个像这样的数据框:

originalDF <- data.frame(A1=c(1, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6), 
A2=c(12.2, 12.2, 15.0, 34.123, 2.0, 66.0, 7.0, 7.0, 7.0, 7.0, 7.0),
A3=c('T1', 'T2', 'T1', 'T1', 'T2', 'T1', 'T1', 'T1', 'T1', 'T1', 'T1'),
A4=c('1234', '1234', '1234', '1234', '4321', '4321', '4321', '4321', '4321', '4321', '4321'),
A5=c('0245', '0245', '0500', '0500', '0600', '0600', '0600','0800','0700','0900', '0900'))

   A1     A2 A3   A4   A5
1 1 12.200 T1 1234 0245
2 1 12.200 T2 1234 0245
3 2 15.000 T1 1234 0500
4 3 34.123 T1 1234 0500
5 4 2.000 T2 4321 0600
6 5 66.000 T1 4321 0600
7 6 7.000 T1 4321 0600
8 6 7.000 T1 4321 0800
9 6 7.000 T1 4321 0700
10 6 7.000 T1 4321 0900
11 6 7.000 T1 4321 0900

我现在想 reshape 它,它最终看起来像这样:

wantedDF <- cbind.data.frame(originalDF, 
A3_0245=c('T1', 'T2', NA, NA, NA, NA, NA, NA, NA, NA, NA),
A3_0500=c(NA, NA, 'T1', 'T1', NA, NA, NA, NA, NA, NA, NA),
A3_0600=c(NA, NA, NA, NA, 'T2', 'T1', 'T1', NA, NA, NA, NA),
A3_0800=c(NA, NA, NA, NA, NA, NA, NA, 'T1', NA, NA, NA),
A3_0700=c(NA, NA, NA, NA, NA, NA, NA, NA, 'T1', NA, NA),
A3_0900=c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 'T1', 'T1'))

   A1     A2 A3   A4   A5 A3_0245 A3_0500 A3_0600 A3_0800 A3_0700 A3_0900
1 1 12.200 T1 1234 0245 T1 <NA> <NA> <NA> <NA> <NA>
2 1 12.200 T2 1234 0245 T2 <NA> <NA> <NA> <NA> <NA>
3 2 15.000 T1 1234 0500 <NA> T1 <NA> <NA> <NA> <NA>
4 3 34.123 T1 1234 0500 <NA> T1 <NA> <NA> <NA> <NA>
5 4 2.000 T2 4321 0600 <NA> <NA> T2 <NA> <NA> <NA>
6 5 66.000 T1 4321 0600 <NA> <NA> T1 <NA> <NA> <NA>
7 6 7.000 T1 4321 0600 <NA> <NA> T1 <NA> <NA> <NA>
8 6 7.000 T1 4321 0800 <NA> <NA> <NA> T1 <NA> <NA>
9 6 7.000 T1 4321 0700 <NA> <NA> <NA> <NA> T1 <NA>
10 6 7.000 T1 4321 0900 <NA> <NA> <NA> <NA> <NA> T1
11 6 7.000 T1 4321 0900 <NA> <NA> <NA> <NA> <NA> T1

我怎样才能实现这个目标?我已经问过一个类似的问题here但我无法开始工作:(。这是我已经尝试过的:

DfNames <- unique(originalDF$A5)
wantedDF[,sprintf('A3_%s',DfNames )] <- NA

(现在我需要有条件添加到每列)

(首选 Base R 和 data.table 解决方案!)提前致谢!

最佳答案

data.table 解决方案:

library(data.table)

dt <- as.data.table(originalDF)
dt[, toc := paste('A3', A5, sep = '_')]

res <- dcast(dt, A1 + A2 + A3 + A4 + A5 + rowid(A1) ~ toc, value.var = 'A3')[, A1_1 := NULL]
# > res[]
# A1 A2 A3 A4 A5 A3_0245 A3_0500 A3_0600 A3_0700 A3_0800 A3_0900
# 1: 1 12.200 T1 1234 0245 T1 NA NA NA NA NA
# 2: 1 12.200 T2 1234 0245 T2 NA NA NA NA NA
# 3: 2 15.000 T1 1234 0500 NA T1 NA NA NA NA
# 4: 3 34.123 T1 1234 0500 NA T1 NA NA NA NA
# 5: 4 2.000 T2 4321 0600 NA NA T2 NA NA NA
# 6: 5 66.000 T1 4321 0600 NA NA T1 NA NA NA
# 7: 6 7.000 T1 4321 0600 NA NA T1 NA NA NA
# 8: 6 7.000 T1 4321 0700 NA NA NA T1 NA NA
# 9: 6 7.000 T1 4321 0800 NA NA NA NA T1 NA
# 10: 6 7.000 T1 4321 0900 NA NA NA NA NA T1
# 11: 6 7.000 T1 4321 0900 NA NA NA NA NA T1

关于r - R 中的 Dcast 或 Reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45014310/

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