如何基于单元格值在R数据框中创建新行?
解决方案
方法一:使用tidyverse包(推荐)
先构造原始数据框:
df <- data.frame( id = c(1, 2), name = c("Pete", "Anna"), shoes = c("nike; adidas; puma", "nike"), stringsAsFactors = FALSE )
利用separate_rows()函数直接拆分指定列,指定分隔符为"; "(匹配分号加空格的组合):
library(tidyverse) result_df <- df %>% separate_rows(shoes, sep = "; ")
执行后即可得到目标格式的数据框。
方法二:Base R 原生实现
如果不想加载额外包,可通过基础函数完成:
# 拆分shoes列的字符串 shoes_split <- strsplit(df$shoes, "; ") # 按拆分后的元素长度重复id和name列 id_rep <- rep(df$id, sapply(shoes_split, length)) name_rep <- rep(df$name, sapply(shoes_split, length)) # 拼接生成新数据框 result_df_base <- data.frame( id = id_rep, name = name_rep, shoes = unlist(shoes_split), stringsAsFactors = FALSE )
内容的提问来源于stack exchange,提问作者Valentin Franke
相关产品推荐
相关产品推荐

