我想将一列因子转换为data.frame中的列表。
我是用下面的代码实现的,但是我觉得这不是正确的方法。
如何改善下面的代码?
我正在处理的数据是关联规则的结果。(使用程序包:rules)(日语)
这是“规则”列的3行:
规则
{道路构造=交差点_交差点付近,昼间12时间平均旅行速度= 20〜30km / h,歩道设置率= 100%,バス优先。専用レーンの有无=なし} => {事故类型=车両相互_追突}
{道路构造=交差点_交差点付近,昼间12时间平均旅行速度= 20〜30km / h,バス优先。専用レーンの有无=なし} => {事故类型=车両相互_追突}
{道路构造=交差点_交差点付近,歩道设置率= 100%,バス优先。専用レーンの有无=なし,代表沿道状况=人口集中地区(商业地域を除く)} => {事故类型=车両相互_追突}
和str(data)
“ data.frame”:50磅。 5个变量中:
$ rules:具有50个级别的因子“ {道路构造=交差点_交差点付近,バス优先。専用レーンの有无=なし,指定最高速度= 50} => {事故类型=车両相互_追突}“,。: 9 8 35 38 10 31 11 25 3 7 ...
$ support:带有48个水平的系数“ 0.050295052”,..:5 14 5 10 24 1 30 13 15 18 ...
$信心:具有50个水平的因数“ 0.555131629”,..:50 49 48 47 46 45 44 43 42 41 ...
$提升:具有50个级别的系数“ 1.894879112”,..:50 49 48 47 46 45 44 43 42 41 ...
$ count:具有48个级别的因子“ 1013”,“ 1250”,..:9 18 9 14 28 5 34 17 19 22 ...
# convert factor to character
data %>% mutate_if(is.factor, as.character) -> data
# delete the RHS in rules(the part after '=>' )
data$rules <- strsplit(data$rules, " =>")
i = 1
for (i in 1:length(data$rules)) {
data$rules[[i]] <- data$rules[[i]][[-2]]
}
# delete "{" and "}"
data$rules <- as.character(data$rules)
data$rules <- strsplit(data$rules, "[{]")
i = 1
for (i in 1:length(data$rules)) {
data$rules[[i]] <- data$rules[[i]][[-1]]
}
data$rules <- as.character(data$rules)
data$rules <- strsplit(data$rules, "[}]")
# split character to list (:length(data$rules[[1]] -> 4))
data$rules <- as.character(data$rules)
data$rules <- strsplit(data$rules, ",")
输出应如下所示:
[[1]]
[1] "道路構造=交差点_交差点付近" "昼間12時間平均旅行速度=20~30km/h" "歩道設置率=100%" "バス優先.専用レーンの有無=なし"
[[2]]
[1] "道路構造=交差点_交差点付近" "昼間12時間平均旅行速度=20~30km/h" "バス優先.専用レーンの有無=なし"
[[3]]
[1] "道路構造=交差点_交差点付近" "歩道設置率=100%" "バス優先.専用レーンの有無=なし"
[4] "代表沿道状況=人口集中地区(商業地域を除く)"
我的代码确实起作用了,但是,我只是觉得它并不美观或效率很高。
所以你可以改善它。或者,正确的方法来完成这项工作。
答案 0 :(得分:0)
我们可以使用str_extract
library(stringr)
library(dplyr)
out <- data %>%
mutate(rules = trimws(str_extract(rules, "(?<=\\{)[^}]+")))
out$rules
#[1] "道路構造=交差点_交差点付近,昼間12時間平均旅行速度=20~30km/h,歩道設置率=100%,バス優先.専用レーンの有無=なし"
#[2] "道路構造=交差点_交差点付近,昼間12時間平均旅行速度=20~30km/h,バス優先.専用レーンの有無=なし"
#[3] "道路構造=交差点_交差点付近,歩道設置率=100%,バス優先.専用レーンの有無=なし,代表沿道状況=人口集中地区(商業地域を除く)"
如果我们要按,
划分“规则”并创建一个list
列
out$rules <- str_split(out$rules, ",")
data <- structure(list(rules = c("{道路構造=交差点_交差点付近,昼間12時間平均旅行速度=20~30km/h,歩道設置率=100%,バス優先.専用レーンの有無=なし} => {事故類型=車両相互_追突}",
"{道路構造=交差点_交差点付近,昼間12時間平均旅行速度=20~30km/h,バス優先.専用レーンの有無=なし} => {事故類型=車両相互_追突}",
"{道路構造=交差点_交差点付近,歩道設置率=100%,バス優先.専用レーンの有無=なし,代表沿道状況=人口集中地区(商業地域を除く)} => {事故類型=車両相互_追突}"
)), class = "data.frame", row.names = c(NA, -3L))