如何实现DataFrame单列文本按每2个元素拆分为同单元格内多行
解决方案
你可以自定义分组拼接函数,把每行的关联对象按每2个为一组拆分,组之间用换行符连接即可,以下是可直接运行的修改后代码:
ash <- matrix(c(4,2,NA,9,3,8,NA,NA,1,5,6,7),nrow=3, byrow=TRUE) ash2 <- c("jegjgqe","hdd","odew","dhjs","ddj","hdiwhek","dij","jsosaeo") ash[] <- ash2[as.matrix(ash)] # 自定义分组拼接函数,per_line参数控制每行显示的名称数量 format_transcripts <- function(x, per_line = 2, line_break = "<br>") { valid_items <- x[complete.cases(x)] # 按指定数量拆分元素 item_groups <- split(valid_items, ceiling(seq_along(valid_items) / per_line)) # 组内用逗号连接,组间用换行符连接 paste(sapply(item_groups, toString), collapse = line_break) } tbl <- data.frame( Topic_no = paste('Topic', seq_len(nrow(ash))), Objects_Transcripts = apply(ash, 1, format_transcripts) )
不同场景适配:
- 如果仅需要在R控制台打印时显示换行,调用函数时传入
line_break = "\n",打印表格时用print(tbl, right = FALSE)即可看到单元格内换行效果。 - 如果是用于R Markdown、HTML等渲染场景,默认的
<br>换行符可以直接被识别,渲染后表格单元格内会自动按每2个名称换行显示。
渲染后的效果参考:
| Topic_no | Objects_Transcripts |
|---|---|
| Topic 1 | dhjs, hdd |
| Topic 2 | odew, jsosaeo |
| Topic 3 | jegjgqe, ddj hdiwhek, dij |
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

