将一行数据转换为相同数据R的两行

时间:2015-07-16 18:37:01

标签: r string split

我有一个数据集,我正在尝试将多行数据串在一起:

被列为Allendale / Irvington / S的社区。希尔顿 比奇菲尔德/十山/西山 等

它们与数据列相关联。

我想带那些街区,使用拆分功能来获取

Allendale
Irvington
S. Hilton
Beechfield
Ten Hills

但我也希望将数据复制下来,以便Allendale Irvington和S. Hilton的列数据相同!

然后我将其按字母顺序排序。

我是一个新手并且谷歌大部分我做的事情,所以如果你也可以解释你正在做什么,这将有很大帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用包的cSplit功能执行此操作:

# create some dummy data
df <- data.frame(n=c(12,15),area=c("Allendale/Irvington/S. Hilton","Beechfield/Ten Hills/West Hills"))

# split & convert to long format
library(splitstackshape)
df.new <- cSplit(df, sep="/", "area", "long", type.convert=TRUE)

结果:

> df.new
    n       area
1: 12  Allendale
2: 12  Irvington
3: 12  S. Hilton
4: 15 Beechfield
5: 15  Ten Hills
6: 15 West Hills

另一种方法是使用包中的tstrsplit函数:

library(data.table)
dt.new <- setDT(df)[, lapply(.SD, function(x) unlist(tstrsplit(x, "/", fixed=TRUE))), by=n]

这给出了:

> dt.new
    n       area
1: 12  Allendale
2: 12  Irvington
3: 12  S. Hilton
4: 15 Beechfield
5: 15  Ten Hills
6: 15 West Hills

您也可以使用:

dt.new <- setDT(df)[, strsplit(area,"/",fixed=TRUE), by=n]

但不保留变量名称(即area)。