r - 循环遍历数据框
问题描述
我有以下信息:
M_PT
CEDIS | PLAZA
9999999021-1 | 10MDA
9999999021-2 | 10CAN
9999999012-1 | 10GUD','10CLJ
9999999012-2 | 10DZV
9999999025-1 | 10LPB','10HHM','10OBR','10HER
9999999025-2 | 10DCU
我想结束以下内容:
CEDIS | PLAZA
9999999021-1 | 10MDA
9999999021-2 | 10CAN
9999999012-1 | 10GUD
9999999012-1 | 10CLJ
9999999012-2 | 10DZV
9999999025-1 | 10LPB
9999999025-1 | 10HHM
9999999025-1 | 10OBR
9999999025-1 | 10HER
9999999025-2 | 10DCU
我试图做以下事情,但我失败了:
> vec <- rep(NA,length(unlist(strsplit(M_PT[,"PLAZA"],split="','"))))
> j <- 0
>
> for(i in 1:nrow(M_PT)){
+
+ if(nchar(M_PT[i,"PLAZA"]) == 5){
+
+ vec[i] <- paste(M_PT[i,"CEDIS"],M_PT[i,"PLAZA"],sep="-")
+
+ }else{
+
+ for(j in 1:sum(nchar(gsub("','","",M_PT[i,"PLAZA"])) / 5)){
+
+ vec[i + ifelse(j == 1, 0, j - 1)] <- paste(M_PT[i,"CEDIS"],
unlist(strsplit(M_PT[i,"PLAZA"],split="','"))[j],sep="-")
+
+ }
+ }
+ }
请对解决方案有任何想法吗?
解决方案
我们可以separate_rows
从tidyr包中使用。
library(dplyr)
library(tidyr)
dat2 <- dat %>% separate_rows("PLAZA")
dat2
# CEDIS PLAZA
# 1 9999999021-1 10MDA
# 2 9999999021-2 10CAN
# 3 9999999012-1 10GUD
# 4 9999999012-1 10CLJ
# 5 9999999012-2 10DZV
# 6 9999999025-1 10LPB
# 7 9999999025-1 10HHM
# 8 9999999025-1 10OBR
# 9 9999999025-1 10HER
# 10 9999999025-2 10DCU
数据
dat <- read.table(text = " CEDIS PLAZA
1 '9999999021-1' 10MDA
2 '9999999021-2' 10CAN
3 '9999999012-1' '10GUD, 10CLJ'
4 '9999999012-2' 10DZV
5 '9999999025-1' '10LPB, 10HHM, 10OBR, 10HER'
6 '9999999025-2' 10DCU",
header = TRUE, stringsAsFactors = FALSE)
推荐阅读
- mysql - 按左外连接联合右外连接排序
- python - OpenPose 如何解决 GPU 内存的 F0414 错误?
- jquery - Jquery Datatables 自定义列搜索
- java - 连接 org.apache.http.conn.HttpHostConnect 时出现超时错误
- sql - 当未定义可能性列表时,使用查找表与“其他”情况的值
- python - 将 RestAPI 与聊天机器人合并
- c# - 在 MongoDB 中存储动态 JSON 数据
- java - 在 Java InputStream 中从 ByteArrayInputStream 转换为 BufferedInputStream
- python-3.x - 如何使用python将字段值存储在嵌套字典中?
- python - 如何通过调整中间的空格对子图进行分组