楼主: Imasasor
4023 2

[问答] 将一行分成多行 [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2024-10-10

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

楼主
Imasasor 发表于 2016-8-15 16:16:47 |AI写论文
288论坛币
数据框有两列数据,如下示

A           中国、美国
B           德国、日本
D           意大利
E            NA


最终想要生成的效果为

A       中国
A       美国
B       德国
B       日本
D       意大利
E       NA

求救高手R代码

关键词:意大利 R代码 数据框 日本 中国 意大利 美国 德国
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
jiangbeilu 学生认证  发表于 2016-8-15 17:14:43
大体的思路如下:
1. 拆分第二列,有strsplit拆分,结果是一个list
2. 用length及sapply求出每个列表元素里向量的长度
3. 用rep根据2中求出的结果进行赋值,完成第1列的实现;用unlist对strsplit拆分的结果进行去列表化,成为一个独立的向量
4. 构建新的data.frameps. 因为论坛里的美元符号显示并不好,这里都改用了with函数代替了。结果是一样的。
  1. options(stringsAsFactors=FALSE)
  2. df <- data.frame(x1=c("A","B","D","E"),
  3.                  x2=c("中国、美国","德国、日本","意大利",NA) )
  4. country_list <- strsplit(with(df,x2),"、")
  5. count_n <- sapply(country_list,length)
  6. data.frame(x1=rep(with(df,x1),count_n),x2=unlist(country_list))
复制代码

藤椅
wumengjie 发表于 2016-8-17 19:19:38
有现成的包的
library(tidyr)
df %>% separate_rows(x2, sep = "、")

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 21:50