关于 dcast() 参数 "value.var"
on dcast() argument "value.var"
所以,我上次在数据帧上使用了 dcast(),其中一列是 ID,其他多个代码为每个 ID 分配。我的 df1 看起来像这样:
ID codes gfreq
123 FGV34 0.988
123 FGV34 0.988
123 FGV34 0.988
566 WER45 na
566 FGV34 0.988
566 FGV34 0.988
为了将上面的格式操作成:
ID FGV34 WER45
123 1 0
566 1 1
dcast(df1, ID ~ codes)
而且效果很好。
现在,我有一个类似的数据框 df2,它只有两列,ID 和代码。
ID codes
123 FGV34
123 FGV34
123 FGV34
566 WER45
566 FGV34
566 FGV34
当我 运行 将其转换为 dcast 时:
1. 我收到有关 Value.var 被覆盖的警告,并且代码列用作 value.var 没关系
2. 这次我得到输出的格式完全不同。
ID FGV34 WER45
123 FGV34 NA
566 FGV34 WER45
我检查了 df1 和 df2 中属性的数据类型。 ID 和代码都相同。
我需要像以前一样使用 0 或 1 而不是 NA 和列名来获得输出的帮助。
其次,我想了解 dcast() 的行为发生了哪些变化。
reshape2
和 spread
都已弃用或停用 - tidyverse
现在希望您使用 pivot_wider
。我不是最新的语法,但 dcast
仍然可以用 data.table
.
做你想做的事
library(data.table)
d1 <- data.table(ID = c(11,11,11,12,12,12),
codes = c('a', 'a', 'a', 'b', 'a', 'a'),
gfreq = c(.5,.5,.5,NA,.5,.5))
dcast(d1, ID ~ codes)
#> Using 'gfreq' as value column. Use 'value.var' to override
#> Aggregate function missing, defaulting to 'length'
#> ID a b
#> 1: 11 3 0
#> 2: 12 2 1
d2 <- data.table(ID = c(11,11,11,12,12,12),
codes = c('a', 'a', 'a', 'b', 'a', 'a'))
dcast(d2, ID ~ codes)
#> Using 'codes' as value column. Use 'value.var' to override
#> Aggregate function missing, defaulting to 'length'
#> ID a b
#> 1: 11 3 0
#> 2: 12 2 1
## If you only want 1's and 0's
dcast(unique(d2), ID ~ codes,
fun.aggregate = length)
#> Using 'codes' as value column. Use 'value.var' to override
#> ID a b
#> 1: 11 1 0
#> 2: 12 1 1
由 reprex package (v0.3.0)
于 2019-10-16 创建
所以,我上次在数据帧上使用了 dcast(),其中一列是 ID,其他多个代码为每个 ID 分配。我的 df1 看起来像这样:
ID codes gfreq
123 FGV34 0.988
123 FGV34 0.988
123 FGV34 0.988
566 WER45 na
566 FGV34 0.988
566 FGV34 0.988
为了将上面的格式操作成:
ID FGV34 WER45
123 1 0
566 1 1
dcast(df1, ID ~ codes)
而且效果很好。 现在,我有一个类似的数据框 df2,它只有两列,ID 和代码。
ID codes
123 FGV34
123 FGV34
123 FGV34
566 WER45
566 FGV34
566 FGV34
当我 运行 将其转换为 dcast 时: 1. 我收到有关 Value.var 被覆盖的警告,并且代码列用作 value.var 没关系 2. 这次我得到输出的格式完全不同。
ID FGV34 WER45
123 FGV34 NA
566 FGV34 WER45
我检查了 df1 和 df2 中属性的数据类型。 ID 和代码都相同。 我需要像以前一样使用 0 或 1 而不是 NA 和列名来获得输出的帮助。 其次,我想了解 dcast() 的行为发生了哪些变化。
reshape2
和 spread
都已弃用或停用 - tidyverse
现在希望您使用 pivot_wider
。我不是最新的语法,但 dcast
仍然可以用 data.table
.
library(data.table)
d1 <- data.table(ID = c(11,11,11,12,12,12),
codes = c('a', 'a', 'a', 'b', 'a', 'a'),
gfreq = c(.5,.5,.5,NA,.5,.5))
dcast(d1, ID ~ codes)
#> Using 'gfreq' as value column. Use 'value.var' to override
#> Aggregate function missing, defaulting to 'length'
#> ID a b
#> 1: 11 3 0
#> 2: 12 2 1
d2 <- data.table(ID = c(11,11,11,12,12,12),
codes = c('a', 'a', 'a', 'b', 'a', 'a'))
dcast(d2, ID ~ codes)
#> Using 'codes' as value column. Use 'value.var' to override
#> Aggregate function missing, defaulting to 'length'
#> ID a b
#> 1: 11 3 0
#> 2: 12 2 1
## If you only want 1's and 0's
dcast(unique(d2), ID ~ codes,
fun.aggregate = length)
#> Using 'codes' as value column. Use 'value.var' to override
#> ID a b
#> 1: 11 1 0
#> 2: 12 1 1
由 reprex package (v0.3.0)
于 2019-10-16 创建