我想根据“引导”变量分离变量。x3 在以下情况下:
set.seed(2)
df = data.frame(x1 = sample(4), x2 = sample(4), x3 = sample(letters[1:2], size = 4, replace = TRUE))
df
# x1 x2 x3
# 1 1 4 a
# 2 3 3 b
# 3 2 1 b
# 4 4 2 a
# Desired output
# x3 x1.a x2.a x1.b x2.b
# a 1 4 NA NA
# b NA NA 3 3
# b NA NA 2 1
# a 4 2 NA NA
我以某种方式感觉到这可以实现,reshape2::dcast()
但我只能让它总共为两个变量工作:
reshape2::dcast(df[,2:3], seq_along(x3) ~ x3, value.var = "x2")[, -1]
# a b
# 1 2 NA
# 2 NA 1
# 3 NA 3
# 4 4 NA
但可能这只是对dcast
. 这个问题是否有一个优雅的解决方案,无需拆分和合并df
?
编辑:有些人提到这样做是一个可怕的想法,我可能不应该这样做。让我详细说明什么时候这才有意义。
想象一下x3
是特定算法的开关。在这种情况下a
和b
是选项。此外x1
和x2
是两种算法都可以采用的参数。不幸的是,这两种算法在相同的参数设置上表现得非常不同,x1
因此x2
将它们作为不同的特征来处理以考虑它们的不相关性是有意义的。