3
私の問題は、パスを分割し、すべてのサブパスを次の "$"オブジェクト(累積サブパスの一種)まで取得し、それぞれに新しい変数を生成することです。サブストリングを取得し、ループを使用して変数に格納する
それは私が所望の出力を得るステップバイステップで行う:Creating new named variable in dataframe using loop and naming conventionに応じてループ内で同じことをやろうと
data<-data.frame(path=c("A/A/$/B/$/A/$","B/C/$","B/C/$/C/$/A/B/$"),stringsAsFactors=FALSE)
library(stringr)
data$tr<-str_count(data$path,"\\$")
data$tr_1<-substr(sapply(strsplit(data$path, "\\$"), `[[`, 1),1,nchar(sapply(strsplit(data$path, "\\$"), `[[`, 1))-1)
data$tr_2<-ifelse(is.na(sapply(strsplit(data$path, "\\$"), `[`, 2))==TRUE,
"",
paste0(data$tr_1,substr(sapply(strsplit(data$path, "\\$"), `[`, 2),1,nchar(sapply(strsplit(data$path, "\\$"), `[`, 2))-1)))
data$tr_3<-ifelse(is.na(sapply(strsplit(data$path, "\\$"), `[`, 3))==TRUE,
"",
paste0(data$tr_2,substr(sapply(strsplit(data$path, "\\$"), `[`, 3),1,nchar(sapply(strsplit(data$path, "\\$"), `[`, 3))-1)))
を、出力は失敗します。
data<-data[,-c(4,5)]
for (i in 2:max(data$tr)) {
data[[paste0("tr_",i)]]<-ifelse(is.na(sapply(strsplit(data$path, "\\$"), `[`, i))==TRUE,
"",
paste0(data$tr_i-1,substr(sapply(strsplit(data$path, "\\$"), `[`, i),1,nchar(sapply(strsplit(data$path, "\\$"), `[`, i))-1)))
}
再帰的にそれを行うための別の方法はありますか? (それぞれの新しい変数は前の変数を使用します)。
ありがとうございます!
ありがとう、ローランド。できます! –