根据前面的标签重新排列特定的单元格

时间:2018-08-21 10:07:03

标签: r dplyr

我在R中工作,我的数据如下所示:现在,它们是df中的3列数据。 有什么方法可以通过前面的标签H,D和A重新排列列? 到目前为止,我看不到任何错误排列的方式...但是我想将其重新排列超过1000行。

 H                   A               D
H":"100@1.68"   A:"100@4.35"    D:"100@3.35"
H":"100@2.33"   D:"100@3.20"    A:"100@2.62"
A":"100@2.25"   D:"100@3.15"    H:"100@2.78"
H":"100@2.80"   D:"100@3.25"    A:"100@2.18"
D":"100@3.05"   A:"100@3.40"    H:"100@2.00"
H":"100@2.30"   A:"100@2.90"    D:"100@2.92"
D":"100@3.05"   H:"100@2.25"    A:"100@2.85"

1 个答案:

答案 0 :(得分:1)

# example data
df = read.table(text = "
H                   A               D
H:100@1.68   A:100@4.35    D:100@3.35
H:100@2.33   D:100@3.20    A:100@2.62
A:100@2.25   D:100@3.15    H:100@2.78
", header=T, stringsAsFactors=F)

library(tidyverse)

df %>%
  gather() %>%                            # reshape data
  group_by(key = substr(value,1,1)) %>%   # update column names based on first character
  mutate(row_id = row_number()) %>%       # add row id (useful for reshaping again)
  spread(key, value) %>%                  # reshape data
  select(-row_id)                         # remove column

# # A tibble: 3 x 3
#   A          D          H         
#   <chr>      <chr>      <chr>     
# 1 A:100@2.25 D:100@3.20 H:100@1.68
# 2 A:100@4.35 D:100@3.15 H:100@2.33
# 3 A:100@2.62 D:100@3.35 H:100@2.78