r - 按时间和 id r 传播字符列

标签 r indexing spread

问题的风格与许多其他问题不同,但仍然不同。 我经常看到人们寻求一种将一列分成几列的方法,但通常是在 df 中,其中列中的每个名称都有一个度量。

像这样:

head(df)
         id time   fish weight
        1  1    1 marlin      4
        2  1    1    cod      1
        3  1    2    cod      1
        4  2    1 salmon      2
        5  2    1    cod      2
        6  2    2    cod      3

所以我可以像这样使用传播(或 dcast 或类似的:

df<-spread(df, fish,weight, fill=F)
   id time cod marlin salmon
1  1    1   1      4   <NA>
2  1    2   1   <NA>   <NA>
3  2    1   2   <NA>      2
4  2    2   3   <NA>   <NA>

但是,如果您没有变量的值(此处为权重),而只想传播鱼的种类怎么办? 所以输出是这样的

  id time   Fish1      Fish2
   1    1   marlin    salmon
   1    2   cod         <NA>
   2    1   salmon       cod
   2    2   cod         <NA>

你是怎么做到的? 感谢您的任何帮助。非常感谢。

最佳答案

我们需要按顺序分组

df %>%
  select(-weight) %>%
  group_by(id, time) %>% 
  mutate(ind = paste0("Fish", row_number())) %>%
  spread(ind, fish)
# A tibble: 4 x 4
# Groups:   id, time [4]
#     id  time Fish1  Fish2
#  <int> <int> <chr>  <chr>
#1     1     1 marlin cod  
#2     1     2 cod    NA   
#3     2     1 salmon cod  
#4     2     2 cod    NA   

数据

df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L), time = c(1L, 1L, 
2L, 1L, 1L, 2L), fish = c("marlin", "cod", "cod", "salmon", "cod", 
"cod"), weight = c(4L, 1L, 1L, 2L, 2L, 3L)), .Names = c("id", 
"time", "fish", "weight"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

关于r - 按时间和 id r 传播字符列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50586998/

相关文章:

r - 如何使用 purrr 将计算列添加到嵌套数据框(列表列)

r - 使用 roxygen2 记录新的 "+"S3 方法时出现问题

mysql - 在 SQL 中存储/查询特定树结构有更好的方法吗?

r - 如何在 r 中传播或转换多个值

r - 以编程方式对数据表中的数字列设置颜色格式

r - 如何引用包含引用调用的表达式并取消引用其中的字符串?

ruby-on-rails - Rails + validates_overlap gem : When to add indexes to the database?

Mysql哈希表索引

javascript - 如何使用扩展运算符将属性添加到 Typescript 中的内部对象?