我的数据如下所示
mydf = data.frame(length=c(1,1,2,2,3),
type=c("A","B","A","B","A"),
val1=1:5,
val2=6:10)
> mydf
length type val1 val2
1 A 1 6
1 B 2 7
2 A 3 8
2 B 4 9
3 A 5 10
在这个例子中,length
3没有type
"B“。这是典型的:每个length
至少有一个type
,但并不总是两个都有。只有两个types
。
我的目标是通过type
将这些数据放入一个“更宽”的形式,这样看起来就像这样,缺失值用零(或NAs)表示:
length val1.A val1.B val2.A val2.B
1 1 2 6 7
2 3 4 8 9
3 5 0 10 0
我一直在尝试使用spread()
实现这一点,但无法实现--我以为可以指定type
和length
作为键,指定其他列作为值,但这似乎是不可能的。有没有一种整洁的方法来做到这一点?
提前谢谢你!
发布于 2019-03-18 02:48:47
我们可以对'val1','val2‘执行gather
操作,将数据转换为'long’格式,将‘unite
’,‘spread
’列转换为单个列,然后将其转换为'wide‘格式
library(tidyverse)
gather(mydf, key, val, val1:val2) %>%
unite(key, key, type, sep=".") %>%
spread(key, val, fill = 0)
https://stackoverflow.com/questions/55210664
复制相似问题