首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清理R中的数据?

如何清理R中的数据?
EN

Stack Overflow用户
提问于 2020-01-08 00:22:57
回答 2查看 88关注 0票数 0

目前,我的数据格式如下:

代码语言:javascript
复制
Var   year   Co-1      Co-2     Co-3  ...
A     2018     a         j        .  
A     2017     b         k        .
A     2016     c         l        .
B     2018     d         m        .
B     2017     e         n        .
B     2016     f         o        .
C     2018     g         p        .
C     2017     h         q        .
C     2016     i         r        .
.       .      .         .        .
.       .      .         .
.       .      .         .

我想将它转换成以下格式:

代码语言:javascript
复制
Company   year    A       B       C
Co-1      2018    a       d       g
Co-1      2017    b       e       h
Co-1      2016    c       f       i
Co-2      2018    j       m       p 
Co-2      2017    k       n       q
Co-2      2016    l       o       r
Co-3      2018    .       .
Co-3      2017    .       .
Co-3      2016    .       .
.
.
.

这些变化实质上是:

在第一列中插入公司名称多次,每年一次,(2018,17,16)

  • Making每个列标题中的变量为A、B和C,而不是在第一列

中有多个AAA、BBB、CCCs。

通过这样做,我希望能够将年份相对于A、B和C中的每一个分别进行回归,同时保持公司对每个数据点的区分,这样我就可以在完成的图表中按公司分组数据点。

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-08 00:34:23

以长格式获取数据,然后以宽但具有不同列的格式获取数据。

代码语言:javascript
复制
library(tidyr)

df %>%
  pivot_longer(cols = starts_with("Co")) %>%
  pivot_wider(names_from = Var, values_from = value)

# A tibble: 6 x 5
#   year name  A     B     C    
#  <int> <chr> <fct> <fct> <fct>
#1  2018 Co-1  a     d     g    
#2  2018 Co-2  j     m     p    
#3  2017 Co-1  b     e     h    
#4  2017 Co-2  k     n     q    
#5  2016 Co-1  c     f     i    
#6  2016 Co-2  l     o     r    

数据

代码语言:javascript
复制
df <- structure(list(Var = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L), .Label = c("A", "B", "C"), class = "factor"), year = c(2018L, 
2017L, 2016L, 2018L, 2017L, 2016L, 2018L, 2017L, 2016L), `Co-1` = 
structure(1:9, .Label = c("a", "b", "c", "d", "e", "f", "g", "h", "i"), 
class = "factor"), `Co-2` = structure(1:9, .Label = c("j", 
"k", "l", "m", "n", "o", "p", "q", "r"), class = "factor")), class = "data.frame", 
row.names = c(NA, -9L))
票数 2
EN

Stack Overflow用户

发布于 2020-01-08 08:51:22

我认为在这里简单地使用因素会容易得多。标签的长度应该是唯一公司的数量,即"Var"值。

代码语言:javascript
复制
df$Var <- factor(df$Var, labels=c("Pepsi", "Coke", "Sprite"))
names(df) <- c("company", "year", LETTERS[seq(names(df)[-(1:2)])])

或者一步一步:

代码语言:javascript
复制
df <- setNames(transform(df, Var=factor(Var, labels=c("Pepsi", "Coke", "Sprite"))),
               c("company", "year", LETTERS[seq(names(df)[-(1:2)])]))
df
#   company year A B C
# 1   Pepsi 2018 a j .
# 2   Pepsi 2017 b k .
# 3   Pepsi 2016 c l .
# 4    Coke 2018 d m .
# 5    Coke 2017 e n .
# 6    Coke 2016 f o .
# 7  Sprite 2018 g p .
# 8  Sprite 2017 h q .
# 9  Sprite 2016 i r .

还提供更清洁的课程:

代码语言:javascript
复制
sapply(df, class)
# company        year           A           B           C 
# "factor"   "integer" "character" "character" "character" 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59637919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档