gpt4 book ai didi

r - 使用 R 中的唯一列转置

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

我有一个类似于以下内容的数据框:

         X1    X2
DocumentID 12345
Check# 9876
Investment Tran1
Investment$ 200
Investment Tran5
Investment$ 100
DocumentID 23456
Check# 8765
Investment Tran1
Investment$ 100
Investment Tran9
Investment$ 50
DocumentID 34567
Check# 7654
Investment Tran4
Investment$ 300
DocumentID 45678
Check# 6543
Investment Tran2
Investment$ 10
Investment Tran5
Investment$ 20
Investment Tran9
Investment$ 70

每个文档 ID 的范围都在投资数量范围内,但我想 reshape 数据框架,以便它根据文档 ID 进行转置(宽)并具有唯一的列。

我希望表格如下所示:

DocumentID Check# Investment Investment$
12345 9876 Tran1 200
12345 9876 Tran5 100
23456 8765 Tran1 100
23456 8765 Tran9 50
34567 7654 Tran4 300
45678 6543 Tran2 10
45678 6543 Tran5 20
45678 6543 Tran9 70

如果每个文档 ID 中有超过 1 笔投资,则重复文档 ID 和 Check#。

感谢您的帮助!

最佳答案

您的数据格式很差,因为它缺少每组键值对的唯一 ID,因此如果不进行一些修改,通常的从宽到长的方法可能无法工作。您可以创建一个合适的列,然后将每一行分散到适当的列中,然后填充和过滤:

library(dplyr)
library(tidyr)

# add row index so spreading will work
df %>% mutate(row = seq_along(X1)) %>%
# spread long to wide, shifting each value into the appropriate column, filling with NA
spread(X1, X2, convert = TRUE) %>%
# get rid of row index
select(-row) %>%
# fill in NA values for all but one column...
fill(-`Investment$`) %>%
# ...so extra NAs in that column make extra rows easy to eliminate
filter(complete.cases(.))

# Check# DocumentID Investment Investment$
# 1 9876 12345 Tran1 200
# 2 9876 12345 Tran5 100
# 3 8765 23456 Tran1 100
# 4 8765 23456 Tran9 50
# 5 7654 34567 Tran4 300
# 6 6543 45678 Tran2 10
# 7 6543 45678 Tran5 20
# 8 6543 45678 Tran9 70

关于r - 使用 R 中的唯一列转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666812/

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