旋转 data.frame,每列有多个“列”

2024-04-25

考虑以下:

tribble(
  ~"1", ~"2", ~"3", ~"4",
  "bob", "sally", "fred","jim",
  "2011", "2012", "2013", "2014"
)

在上面,列“1”存储我们真正想要分隔列的值,例如:

tribble(
  ~col, ~name, ~year,
  "1", "bob", "2011",
  "2", "sally", "2012",
  "3", "fred", "2013",
  "4", "jim", "2014"
)

起初,我尝试过pivot_longer(everything())但这会产生重复的行。

  name  value
  <chr> <chr>
1 1     bob  
2 2     sally
3 3     fred 
4 4     jim  
5 1     2011 
6 2     2012 
7 3     2013 
8 4     2014

我考虑然后尝试pivot_wider,但我无法部分选择上面值列中的年份或名称。

有任何想法吗?当然,这是一个玩具示例 - 基本思想是获取多行并将它们转换为列,而不需要重复代码。


一个简单的解决方案是

tibble::rownames_to_column(as.data.frame(t(A)))

带输出

  rowname    V1   V2
1       1   bob 2011
2       2 sally 2012
3       3  fred 2013
4       4   jim 2014

where

> A = tribble(
+     ~"1", ~"2", ~"3", ~"4",
+     "bob", "sally", "fred","jim",
+     "2011", "2012", "2013", "2014"
+ )

Edit:

您也可以像这样使用管道

A %>% t() %>% as.data.frame() %>% tibble::rownames_to_column()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

旋转 data.frame,每列有多个“列” 的相关文章

随机推荐