【问题标题】:How to paste rows with same ID behind each other in r [duplicate]如何在r中将具有相同ID的行相互粘贴[重复]
【发布时间】:2018-05-19 09:30:28
【问题描述】:

这可能是一个简单的问题,但我无法在任何地方找到答案 :(所以你能帮帮我吗?

如果有一个如下所示的数据框:

 "ID"      "date" 
  A       01-03-2017
  A       05-02-2016
  B       08-03-2016
  A       09-11-2012
  B       02-03-2014
  B       09-07-2013
  C       23-08-2016
  B       24-05-2017
  C       12-12-2015

我希望它看起来像这样: `

"ID"      "date.1"  "date.2"  "date.3"   "date.4"                                    
A       01-03-2017  05-02-2016  09-11-2012  NA 
B       08-03-2016  02-03-2014  09-07-2013 24-05-2017
C       23-08-2016  12-12-2015  NA          NA

因此,将具有相同 ID 的所有行彼此粘贴在一起,为每一行创建一个新列。 我希望我说清楚。有人可以告诉我该怎么做吗? 非常感谢提前, 萨拉

【问题讨论】:

  • 试试这个library(tidyverse); df %>% group_by(ID) %>% mutate(value = date, date = seq_along(ID)) %>% spread(key = date, value = value, sep = "."),其中df是您的数据集的名称。

标签: r dplyr sapply


【解决方案1】:

这是使用“传播”功能的解决方案。谢谢Markus

# Libraries
library(tidyverse)  

# 1. Data set
df <- data.frame(
  id = c("A", "A", "B", "A", "B", "B", "C", "B", "C"),
  date = c("01-03-2017", "05-02-2016", "08-03-2016", "09-11-2012",
       "02-03-2014", "09-07-2013", "23-08-2016", "24-05-2017", "12-12-2015"))

# 2. New feature 'value' the same as 'date'
df$value <- df$date

# 3. Use 'spread' from 'tidyverse'

# 3.1. Just 'spread'
spread(df, key = date, value = value)

# 3.2. 'spread' thanks 'Markus' for the solution
df %>% 
  group_by(id) %>% 
  mutate(date = seq_along(id)) %>% 
  spread(key = date, value = value, sep = ".") 

希望对你有所帮助

【讨论】:

  • 非常感谢!!这行得通!
猜你喜欢
  • 2014-05-21
  • 2017-06-25
  • 2017-01-26
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2021-09-21
  • 2015-11-30
相关资源
最近更新 更多