r - 使用 dplyr 在 R 中创建多个新的 data.frame 列
问题描述
我有一个看起来像这样的数据框:
df <- data.frame(text=c('my_text', 'looks_like_this', 'I_want_to_split_it'))
我想使用某种dplyr
家庭功能来制作一个如下所示的数据框:
newdf <- data.frame(text=c('my_text', 'looks_like_this', 'I_want_to_split_it'),
W1=c('my', 'looks', 'I'),
W2=c('text', 'like', 'want'),
W3=c(NA, 'this', 'to'),
W4=c(NA, NA, 'split'),
W5=c(NA, NA, 'it'))
我在想这样的事情:
newdf <- df %>%
mutate(WX=strplit(text, '_'))
但不能完全弄清楚。
解决方案
我们可以使用strsplit
然后NA
在最后做填充
lst1 <- strsplit(as.character(df$text), "_")
out <- do.call(rbind.data.frame, lapply(lst1, `length<-`, max(lengths(lst1))))
names(out) <- paste0("W", seq_along(out))
cbind(df, out)
或者另一种选择是read.table
cbind(df, read.table(text = as.character(df$text), sep="_", header = FALSE,
fill = TRUE, col.names = paste0("W", 1:5)))
tidyverse
,我们可以使用separate
library(dplyr)
library(tidyr)
library(stringr)
df %>%
separate(text, into = str_c("W", 1:5), fill = 'right', remove = FALSE)
# text W1 W2 W3 W4 W5
#1 my_text my text <NA> <NA> <NA>
#2 looks_like_this looks like this <NA> <NA>
#3 I_want_to_split_it I want to split it
或者在strsplit
基于 OP 的代码完成之后,使用unnest_wider
df %>%
mutate(WX = strsplit(as.character(text), "_")) %>%
unnest_wider(WX, names_repair = ~c('text', str_c("W", 1:5)))
或使用cSplit
library(splitstackshape)
cSplit(df, "text", "_")
推荐阅读
- python-3.x - 如何通过python代码创建和发送邮件而不在odoo中的xml中创建邮件模板
- python - 如何编写正则表达式来匹配文本文件中的代词?
- python - 我想检查传入文件(导入的文件)是否是 python 中的 .csv 或 .xls 或 .xlxs
- c# - C# 从图表中删除“幽灵直线”
- azure - 如何使用 Azure DevOps 管道扩展/缩减 Azure 订阅中的所有资源?
- python - matplotlib 图的乳胶渲染文本中的中心标题
- google-apps-script - 每分钟自动更新/刷新谷歌表格单元格
- angular - Angular 7 - 内置产品中的编译错误 - 错误:错误:内部错误:未知标识符未定义
- angular - 错误:“@angular/platform-browser/platform-browser”没有导出的成员“文档”
- java - 多次显示相同的适配器 obj,但为什么呢?