重塑2 dcast-fun.aggregate表格中的值
我想将一个较长的data.frame制成表格。下面的示例代码创建了一个长data.frame,其中包含“ID”、“unit”和“mat”列。使用dcast,我想创建一个宽格式的data.frame,每个“mat”都有新的列,值应该是1(这个组合存在)或0(不存在,不存在…) 要使用1和0(按计划)填充表格,我现在找到的唯一方法是在long data.frame中添加一个额外的列,并使用“fun.aggregate=tablete”作为额外的dcast参数,即:重塑2 dcast-fun.aggregate表格中的值,r,reshape2,R,Reshape2,我想将一个较长的data.frame制成表格。下面的示例代码创建了一个长data.frame,其中包含“ID”、“unit”和“mat”列。使用dcast,我想创建一个宽格式的data.frame,每个“mat”都有新的列,值应该是1(这个组合存在)或0(不存在,不存在…) 要使用1和0(按计划)填充表格,我现在找到的唯一方法是在long data.frame中添加一个额外的列,并使用“fun.aggregate=tablete”作为额外的dcast参数,即: df.long <- dat
df.long <- data.frame(ID = c(3, 4, 8, 9, 3, 4, 10, 3, 3, 4),
unit = c("cm", "cm", "m", "K", "cm", "cm", "m", "cm", "m", "cm"),
mat = c(1,1,1,1,2,2,2,3,3,3),
value = c(1,1,1,1,1,1,1,1,1,1))
dcast(df.long, ID + unit ~ mat, fun.aggregate = tabulate)
ID unit 1 2 3
1 3 cm 1 1 1
2 3 m 0 0 1
3 4 cm 1 1 1
4 8 m 1 0 0
5 9 K 1 0 0
6 10 m 0 1 0
df.long我想这就行了:
dcast(df.long, ID + unit ~ mat,
fill = 0,
fun.aggregate = function(x) 1)
# ID unit 1 2 3
#1 3 cm 1 1 1
#2 3 m 0 0 1
#3 4 cm 1 1 1
#4 8 m 1 0 0
#5 9 K 1 0 0
#6 10 m 0 1 0
我认为这就是工作:
dcast(df.long, ID + unit ~ mat,
fill = 0,
fun.aggregate = function(x) 1)
# ID unit 1 2 3
#1 3 cm 1 1 1
#2 3 m 0 0 1
#3 4 cm 1 1 1
#4 8 m 1 0 0
#5 9 K 1 0 0
#6 10 m 0 1 0
Roland的方法确实有效,但是对于聚合函数,简单地使用as.logical
,可能更有意义:
dcast(df.long, ID + unit ~ mat,
fill = 0,
fun.aggregate = as.logical,
value.var = "mat")
# ID unit 1 2 3
# 1 3 cm 1 1 1
# 2 3 m 0 0 1
# 3 4 cm 1 1 1
# 4 8 m 1 0 0
# 5 9 K 1 0 0
# 6 10 m 0 1 0
尝试将as.logical(-1:3)
转换为0,以及将什么转换为1。罗兰的方法确实有效,但简单地将as.logical
用于聚合函数可能更有意义:
dcast(df.long, ID + unit ~ mat,
fill = 0,
fun.aggregate = as.logical,
value.var = "mat")
# ID unit 1 2 3
# 1 3 cm 1 1 1
# 2 3 m 0 0 1
# 3 4 cm 1 1 1
# 4 8 m 1 0 0
# 5 9 K 1 0 0
# 6 10 m 0 1 0
尝试as.logical(-1:3)
来了解什么被转换为零,什么被转换为一。尽管我不完全理解fun.aggregate参数的语法,但这个解决方案工作得非常好!谢谢注:字符串“function(x)1”是不是一个快捷的有趣版本?如果你的表达式只有一行代码,你就不需要大括号了<代码>乐趣。聚合
需要一个函数。这也可以是一个匿名函数(动态定义)。尽管我不完全理解fun.aggregate参数的语法,但这个解决方案工作得非常好!谢谢注:字符串“function(x)1”是不是一个快捷的有趣版本?如果你的表达式只有一行代码,你就不需要大括号了<代码>乐趣。聚合需要一个函数。这也可以是一个匿名函数(动态定义)。这对于df.long
中的零值可能有意义,但从描述来看,我假设这些值应该在相同的结果旁边指示为存在(即1
),这种方法更符合我的逻辑,即为“它存在”分配一些值(1),并且(0)对于nope,即true false。但是,两个dcast解决方案都需要fill=0
语句,尽管在具有fun.aggregate=as.logical
的解决方案中,我希望此功能是内在的。@PJussel fill中的默认选项是NA
,必须更改此选项对于零值可能有意义在df.long
中,但从描述来看,我认为除了相同的结果之外,这些应该被表示为存在(即1
),这种方法更符合我的逻辑,即为“它存在”和(0)分配一些值(1)对于nope,即true false。但是,两个dcast解决方案都需要fill=0
语句,尽管在带有fun.aggregate=as.logical
的解决方案中,我希望此功能是内在的。@PJussel fill中的默认选项是NA
,必须更改