首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在tidyverse中按列中的值转换为宽格式

在tidyverse中按列中的值转换为宽格式
EN

Stack Overflow用户
提问于 2019-03-18 02:47:00
回答 1查看 33关注 0票数 1

我的数据如下所示

代码语言:javascript
复制
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)表示:

代码语言:javascript
复制
  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()实现这一点,但无法实现--我以为可以指定typelength作为键,指定其他列作为值,但这似乎是不可能的。有没有一种整洁的方法来做到这一点?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 02:48:47

我们可以对'val1','val2‘执行gather操作,将数据转换为'long’格式,将‘unite’,‘spread’列转换为单个列,然后将其转换为'wide‘格式

代码语言:javascript
复制
library(tidyverse)
gather(mydf, key, val, val1:val2) %>% 
   unite(key, key, type, sep=".") %>% 
   spread(key, val, fill = 0)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55210664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档