r - 通过消除器将字符串拆分为无限数量的列
问题描述
我有一个用户 ID 和登录日期的数据库导出。
structure(list(User.Id = c(2542573L, 2571394L, 2770912L, 2683246L,
2832110L, 2773277L), Days.Played = c("", "2020-01-15,2020-01-16,2020-01-21,2020-01-22",
"2020-06-29", "2020-04-19,2020-04-24,2020-04-29", "2020-09-04",
"2020-06-23"), row.names = c(NA,
6L), class = "data.frame")
|---------------------|------------------|
| id | logged_in |
|---------------------|------------------|
| a | 2019-11-21, |
| | 2019-11-22, |
| | 2019-11-23,|
| | 2019-11-24,|
| | 2019-11-25 |
|---------------------|------------------|
| b | |
|---------------------|------------------|
| c | 2019-11-21, |
| | 2019-11-22, |
|---------------------|------------------|
我想要做的是用“,”分割日期列,所以每个日期都在它自己的列中
我希望它看起来像下面有一个 login.[a:zz] 延伸到数据库中最长的字符串一样宽。这可能会达到 1000 或更多。
|---------------------|------------------|------------------|
| id | logged_in.a | loggedin.b |
|---------------------|------------------|------------------|
| a | 2019-11-21, | 2019-11-22 |
| | | |
| | | |
| | | |
| | | |
|---------------------|------------------|------------------|
| b | | |
|---------------------|------------------|------------------|
| c | 2019-11-21, | |
| | | 2019-11-22, |
|---------------------|------------------|------------------|
然后我计划将数据集收集到一个高文件中。我使用的代码如下,但我必须定义 col 名称。我的问题是我不知道会有多少。
require(tidyr)
test %>% transform(.,Days.Played=colsplit(Days.Played, pattern=",", names=c('a','b')))
有谁知道如何解决这个问题或有任何建议?
解决方案
你也可以试试:
library(tidyverse)
#Data
df <- data.frame(id=c('a','b','c'),
logged_in=c('2019-11-21,2019-11-22,2019-11-23,2019-11-24,2019-11-25','','2019-11-21,2019-11-22,'),stringsAsFactors = F)
#Code
newdf <- df %>%
pivot_longer(-c(id)) %>%
separate_rows(value,sep=',') %>%
group_by(id) %>%
mutate(Var=paste0('logged.in.',row_number())) %>%
select(-name) %>%
pivot_wider(names_from = Var,values_from=value,values_fill='')
输出:
# A tibble: 3 x 6
# Groups: id [3]
id logged.in.1 logged.in.2 logged.in.3 logged.in.4 logged.in.5
<chr> <chr> <chr> <chr> <chr> <chr>
1 a "2019-11-21" "2019-11-22" "2019-11-23" "2019-11-24" "2019-11-25"
2 b "" "" "" "" ""
3 c "2019-11-21" "2019-11-22" "" "" ""
推荐阅读
- python - 通过c++20协程制作python生成器
- c++ - BMP180 和 Arduino Mega 导致串行通信冻结
- ios - 发送带有多个附件的电子邮件 (Swift)
- python-3.x - Python 默认行为会吃掉所有输入行,将 EOFError 留给下一个脚本
- linux - 如何知道 .sh 文件内容是在 crontab 中执行的
- python - 有没有一种直接的方法可以使用 Swift 对 Apple Watch 应用程序调用 Python 或 NodeJS API?
- ruby-on-rails-6 - Rails 生产容器“您要查找的页面不存在。”
- http-status-codes - “Too Soon to Renew JWT Token”的适当 HTTP 状态代码
- excel - 从 Excel 读取时,Pandas 将整数转换为实数
- google-api - 从 Nest-camera 获取单个图像