如何分隔值以逗号分隔的列

时间:2018-02-08 11:36:45

标签: r air data-conversion weather

我正在使用R,我有四组天气读数,用逗号分隔如下:

{1994: 474732, 1995: -15152, 1996: -3319, 1997: -5421, 1998: 2936, 1999: -3791, 2000: 19809, 2001: -15866, 2002: -8158, 2003: 1675}

三个读数(臭氧,10微米,2.5微米)的顺序随机移动。我想打破4列,用逗号分隔的3个值分成12列并将它们组合在一起,这样四列中的第一个值将合在一起,第二个值合在一起,第三个值合在一起。有没有人有任何想法?谢谢!

2 个答案:

答案 0 :(得分:1)

我的“splitstackshape”软件包非常适合这种转换:

library(splitstackshape)
cSplit(mydf, names(mydf), direction = "long")
#     pollutant air_quality_idx air_quality_cat air_quality_cat_idx
#  1:     PM2.5              28            Good                   1
#  2:      PM10               6            Good                   1
#  3:     OZONE              24            Good                   1
#  4:     PM2.5              28            Good                   1
#  5:      PM10               5            Good                   1
# ---                                                              
# 26:      PM10               5            Good                   1
# 27:     OZONE              22            Good                   1
# 28:     PM2.5              60        Moderate                   2
# 29:      PM10               5            Good                   1
# 30:     OZONE              28            Good                   1

在基地R中,你也可以这样做:

data.frame(lapply(mydf, function(x) 
  type.convert(unlist(strsplit(as.character(x), ",", TRUE)))))

或者,使用“tidyverse”,您可以尝试:

library(tidyverse)
mydf %>%
  mutate_all(funs(strsplit(as.character(.), ","))) %>%
  unnest()

答案 1 :(得分:0)

这是一个解决方案,虽然可能不是最优雅的。它依赖于使用# app/views/comments/_form.html.erb <%= form_for @comment, :html => {:class => "commentsForm"} do |f| %> <div class="field"> <%= f.label :description %><br> <%= f.text_field :description %> </div> <%= recaptcha_tags %> <div class="actions"> <%= f.submit %> </div> <% end %> 将每个列拆分为三个,然后简单地将该12列表拆分为三个带有tidyr::separate的4列表,为它们提供相同的列名,并将它们堆叠在顶部彼此dplyr::select

bind_rows