gpt4 book ai didi

R:将数据框中的数据转换为列

转载 作者:行者123 更新时间:2023-12-04 10:43:46 25 4
gpt4 key购买 nike

我有这样一个数据框

Tag   Date (DD/MM/YYYY)
AA 1/1/2010
AB 2/1/2010
AC 3/1/2010
AA 4/1/2010
AB 5/1/2010
AA 6/1/2010
AB 7/1/2010
AC 8/1/2010

现在,不同标签的数量是有限的(平均少于 10 个)。我需要的是以更舒适的方式获取数据来处理。我已经分析了 Tag 序列数据以找出更频繁重复的模式,在本例中为 (AA,AB,AC)。

现在,我想要的是将数据转换成这样的形式,以便我可以对其进行操作。

AA        AB        AC
1/1/2010 2/1/2010 3/1/2010
4/1/2010 5/1/2010 NA
6/1/2010 7/1/2010 8/1/2010

我看过这个问题,Turning field values into column names in an R data frame ,它非常接近我需要的。这样做

>libray(reshape2)
>df<-sqldf("SELECT Tag, Date FROM validData")
>head(dcast(df,Date~Tag))

产量

Using Date as value column: use value_var to override.
Aggregation function missing: defaulting to length

Date AF687A AVISOO B32D76 B3DC39 B52C72 DF7EAD DF8E83 DFA521 DFA91A
1 2010-12-23 09:18:50 0 0 0 0 1 0 0 0 0
2 2010-12-23 09:18:52 1 0 0 0 0 0 0 0 0
3 2010-12-23 09:18:54 0 0 0 0 1 0 0 0 0
4 2010-12-23 09:18:57 1 0 0 0 0 0 0 0 0
5 2010-12-23 09:18:58 0 0 0 0 1 0 0 0 0
6 2010-12-23 09:19:00 0 0 0 1 0 0 0 0 0

我想我已经接近了,但我无法弄清楚最后一步,就像我上面描述的那样压缩表格。有什么线索吗?

最佳答案

我会根据 Tag 列中的模式计算要将 Date 放入的行和列,然后填充一个新矩阵。

首先为每一行设置你要匹配的模式;我将使用 unique 的结果。如果第一组缺少一个值(最后一个值除外),这将无法正常工作。

pat <- unique(df$Tag)

然后通过将标记与模式匹配来计算列,并通过注意新模式何时开始来计算行。

col <- match(df$Tag, pat)
row <- cumsum(c(0,diff(col))<=0)

然后创建矩阵并填充它!

out <- matrix(nrow=max(row), ncol=max(col))
colnames(out) <- pat
out[cbind(row, col)] <- df$Date

结果是

> out
AA AB AC
[1,] "1/1/2010" "2/1/2010" "3/1/2010"
[2,] "4/1/2010" "5/1/2010" NA
[3,] "6/1/2010" "7/1/2010" "8/1/2010"

关于R:将数据框中的数据转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281481/

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