【问题标题】:Dataframe Column Switching [duplicate]数据框列切换[重复]
【发布时间】:2018-03-22 17:21:10
【问题描述】:

我想知道是否有一种方法可以使用函数在另一列下切换一列。基本上,如果我有如下数据框:

a <- data.frame("A" = 1:5, "B" = 2:6) 

  A B
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

我想得到类似的东西:

   A
1  1
2  2
3  3
4  4
5  5
6  2
7  3
8  4
9  5
10 6

【问题讨论】:

  • 我看不出有理由投反对票,所以我投了反对票。

标签: r dataframe


【解决方案1】:

您可以通过stack 实现这一目标:

a <- data.frame("A" = 1:5, "B" = 2:6) 
stack(a)

b <- stack(a)
dplyr::select(b, values)
   values
1       1
2       2
3       3
4       4
5       5
6       2
7       3
8       4
9       5
10      6

你当然可以写一个快捷函数:

library(dplyr)
stack_cols <- function(df){
  stack(df) %>%
    select(values)
}

stack_cols(a)

   values
1       1
2       2
3       3
4       4
5       5
6       2
7       3
8       4
9       5
10      6

【讨论】:

  • 当你可以使用基础 R 时为什么要使用外部包:stack(a)[,'values',drop=FALSE]
  • 好吧,为什么不呢?
  • 我向你保证,在生产环境中,你需要安装的越少越好;)
  • 我同意这一点!如果代码是为生产设计的,这确实是一个更好的解决方案。
【解决方案2】:

你可以使用unlist

DF <- data.frame(A=unlist(a))
> DF
   A
A1 1
A2 2
A3 3
A4 4
A5 5
B1 2
B2 3
B3 4
B4 5
B5 6

【讨论】:

    【解决方案3】:

    一个非常简单直接的方法可能是:

    df <- data.frame(A=c(a$A, a$B))
    > df
       A
    1  1
    2  2
    3  3
    4  4
    5  5
    6  2
    7  3
    8  4
    9  5
    10 6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 2021-11-26
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多