您如何在其中使用pivot_wider值为字符?

问题描述 投票:1回答:1

我想在值是字符串的地方使用pivot_wider或spread。

这里是一个例子:

a <- c("a", "a", "b", "c", "c", "c")
x <- c("x", "y", "y", "x", "y", "z")
m <- cbind(a,x)
> m
  a   x  
[1,] "a" "x"
[2,] "a" "y"
[3,] "b" "y"
[4,] "c" "x"
[5,] "c" "y"
[6,] "c" "z"

我想要的输出是:

      V1 V2   V3   V4
one    a  x    y <NA>
two    b  y <NA> <NA>
three  c  x    y    z

但是,我的老去,传播,不起作用:

> as.data.frame(m) %>% spread(key = a, value = x)
Error: Each row of output must be identified by a unique combination of keys.
Keys are shared for 5 rows:
* 1, 2
* 4, 5, 6

pivot_wider也没有:

 as.data.frame(m) %>%
  group_by(a) %>%
  mutate(namer = n()) %>%
  ungroup() %>%
  pivot_wider(#id_cols = a,
              names_from = namer,
              values_from = x,
              values_fill = list(namer = "none"),
              names_prefix = "City")

有什么建议吗?

@ akrun谢谢你的回答,这里有很多事情要做,这就是我将其缩小到的范围:

m <- data.frame(a, x) 
m %>% group_by(a) %>% 
   mutate(rn = str_c("V", row_number()+1)) %>% 
   ungroup %>% 
   pivot_wider(names_from = rn, values_from = x) 

作品。但是,>

m %>% 
   group_by(a) %>% 
   mutate(rn = n()) %>% 
   ungroup %>% 
   pivot_wider(names_from = rn, values_from = x, names_prefix = "V") 

没有。看来问题是我使用数字作为名称,并使用names_prefix将其转换为字符。这也是您的理解吗?

我想在值是字符串的情况下使用pivot_wider或spread。这是一个示例:a ...

r pivot tidyverse tidy spread
1个回答
1
投票

我们可以创建data.frame而不是matrixcbind创建matrix

© www.soinside.com 2019 - 2024. All rights reserved.