如何解决在右列中填充数据
我有长格式的数据。我想将其转换为宽格式。第一行应转到第一列,第二行应转到第二列,第三行应转到第三列。类似地,第四行到第一列,依此类推。我这样做了,但有些行缺少数据,因此循环应跳过该行。找出列映射的逻辑- 第一列必须包含单词“ bed”,第二列必须包含单词“ m ^ 2”,第三列必须包含单词“ floor”或“ lift”。
let str = pm.response.json()[0].stringval
所需的输出应如下-
完整数据集链接-https://sites.google.com/site/pocketecoworld/testing.csv
解决方法
一个选择是基于列“ V1”中“ bed”子字符串的出现创建分组变量,并按该变量分组,使用row_number
作为索引替换以创建列名称列vector
的字符串,然后使用pivot_wider
将“ long”格式重塑为“ wide”格式
library(dplyr)
library(stringr)
library(tidyr)
Type %>%
group_by(grp = cumsum(str_detect(V1,'^\\d+\\s*bed$'))) %>%
mutate(colnm = c('BedRoom','Size','Floor')[row_number()]) %>%
ungroup %>%
pivot_wider(names_from = colnm,values_from = V1) %>%
select(-grp)
# A tibble: 4 x 3
# BedRoom Size Floor
# <chr> <chr> <chr>
#1 2bed 197m² Floor5exteriorwithlift
#2 3bed 103m² Groundfloorexteriorwithlift
#3 3bed 110m² <NA>
#4 4bed 195m² Floor5exteriorwithlift
使用OP的原始数据
dat1 %>%
group_by(grp = cumsum(str_detect(V1,'^\\d+\\s*bed$'))) %>%
mutate(colnm = c('BedRoom','Floor')[row_number()]) %>%
ungroup %>%
pivot_wider(names_from = colnm,values_from = V1) %>%
select(-grp)
# A tibble: 30 x 3
# BedRoom Size Floor
# <chr> <chr> <chr>
# 1 4 bed "160 m\xb2" Floor 3 exterior with lift
# 2 7 bed "899 m\xb2" <NA>
# 3 7 bed "710 m\xb2" <NA>
# 4 4 bed "320 m\xb2" Floor 8 exterior with lift
# 5 4 bed "326 m\xb2" Floor 2 exterior with lift
# 6 4 bed "153 m\xb2" Floor 12 exterior with lift
# 7 2 bed "158 m\xb2" Floor 5 exterior with lift
# 8 3 bed "275 m\xb2" Ground floor exterior with lift
# 9 3 bed "136 m\xb2" Floor 2 exterior with lift
#10 6 bed "623 m\xb2" <NA>
# … with 20 more rows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。