text to column, do not repeat column name
本问题已经有最佳答案,请猛点这里访问。
我有一个如下所示的 df:
1 2 3 4 | id name grade 1 rich, tom, todd, 12 2 chris,mary 9 3 larry 10 |
我运行以下代码将文本拆分为列:
1 | newdf <- within(df, name<-data.frame(do.call('rbind', strsplit(as.character(name), ',', fixed=TRUE)))) |
这是我的输出:
1 2 3 4 | id name.X1 name.X2 name.X3 grade 1 rich tom todd 12 2 chris mary chris 9 3 larry larry larry 10 |
我的代码是重复名称(在 id 2
我们可以使用
中的
1 2 3 4 5 6 | library(splitstackshape) cSplit(df,"name",",") # id grade name_1 name_2 name_3 #1: 1 12 rich tom todd #2: 2 9 chris mary NA #3: 3 10 larry NA NA |
如果我们使用
1 2 3 4 5 6 7 8 | lst <- strsplit(as.character(df$name),",\\\\s*") mx <- max(lengths(lst)) df[paste0("name", seq(mx))] <- lapply(lst, `length<-`, mx) df[setdiff(names(df),"name")] # id grade name1 name2 name3 #1 1 12 rich chris larry #2 2 9 tom mary <NA> #3 3 10 todd <NA> <NA> |