r - 如何使用 dplyr 将行转换为列

标签 r dplyr reshape tidyverse

这个问题在这里已经有了答案:





Solidifying a melted data frame?

(3 个回答)



Spreading a two column data frame with tidyr

(5 个回答)


4年前关闭。




我有以下数据框(tibble):

library(tidyverse)
lines<-"
A,foo,9394981
B,bar,6826405
C,qux,1074885
D,gop,1493691   
A,foo,100
B,bar,200
C,qux,300
D,gop,400 
"
con <- textConnection(lines)
dat <- read.csv(con,header=FALSE)
close(con)
dat <- as.tibble(dat)
dat

看起来像这样:
# A tibble: 8 × 3

      V1     V2      V3
  <fctr> <fctr>   <dbl>
1      A    foo 9394981
2      B    bar 6826405
3      C    qux 1074885
4      D    gop 1493691
5      A    foo     100
6      B    bar     200
7      C    qux     300
8      D    gop     400

我怎样才能将它转换为:
foo        bar    qux     gop
9394981 6826405 1074885 1493691 
100     200      300      400

最佳答案

我们可以使用 spread来自 tidyr创建行索引后处理 duplicate元素

library(tidyr)
library(dplyr)
dat %>% 
   select(-V1) %>% 
   group_by(V2) %>%
   dplyr::mutate(i1 = row_number()) %>% 
   spread(V2, V3) %>%
   select(-i1)

或使用 dcast来自 data.table
library(data.table)
dcast(setDT(dat), rowid(V2) ~ V2, value.var = "V3")[, V2 := NULL][]

关于r - 如何使用 dplyr 将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43413322/

相关文章:

r - R : Pass argument to glm inside an R function

r - 分类/二进制数据总和的直方图

r - Dplyr - 多列的平均值

r - 用组内相同的值填充缺失值(将已知的 IMEI 与缺失的手机型号匹配)

r - 按组查找插值,也许使用 dplyr

R 通过组合两个变量的共同值来 reshape 数据

r - 在数据框中的所有列中估算最频繁的分类值

r - 按钮提交 R 与 Shiny

将多个值列 reshape 为宽格式

python - numpy 二维数组的 block 均值