gpt4 book ai didi

r - 如何将 xtabs() 的结果转换为 R 中的数据框?

转载 作者:行者123 更新时间:2023-12-03 13:51:03 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to convert a table to a data frame

(5 个回答)


3年前关闭。




我有数据帧 df_a 之类的数据,并希望将其转换为数据帧 df_b 中的格式。

xtabs() 给出了类似的结果,但我没有找到访问元素的方法,如下面的示例代码所示。通过 xa[1,1] 访问没有任何优势,因为数字索引(“1”)和名称(“A”)索引之间的相关性较弱。如您所见, xtabs() 结果存在排序差异,因此 xa[2,2]=2 而不是 df_b 列表中的 0。

    > df_a
ItemName Feature Amount
1 First A 2
2 First B 3
3 First A 4
4 Second C 3
5 Second C 2
6 Third D 1
7 Fourth B 2
8 Fourth D 3
9 Fourth D 2
> df_b
ItemName A B C D
1 First 6 3 0 0
2 Second 0 0 5 0
3 Third 0 0 0 1
4 Fourth 0 2 0 5
> df_b$A
[1] 6 0 0 0

> xa<-xtabs(df_a$Amount~df_a$ItemName+df_a$Feature)
> xa
df_a$Feature
df_a$ItemName A B C D
First 6 3 0 0
Fourth 0 2 0 5
Second 0 0 5 0
Third 0 0 0 1
> xa$A
Error in xa$A : $ operator is invalid for atomic vectors

有一种使用 for() 循环进行迭代转换的方法,但在我的情况下完全低效,因为我的数据有数百万条记录。

为了进一步处理我所需的输出格式是数据帧。
如果有人解决了类似的问题,请分享。

最佳答案

您可以使用 as.data.frame.matrix(xa)

# output
A B C D
First 6 3 0 0
Fourth 0 2 0 5
Second 0 0 5 0
Third 0 0 0 1

## or
df_b <- as.data.frame.matrix(xa)[unique(df_a$ItemName), ]
data.frame(ItemName = row.names(df_b), df_b, row.names = NULL)
# output
ItemName A B C D
1 First 6 3 0 0
2 Second 0 0 5 0
3 Third 0 0 0 1
4 Fourth 0 2 0 5

关于r - 如何将 xtabs() 的结果转换为 R 中的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54323702/

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