根据条件拆分多个列并重命名

时间:2017-03-22 19:10:07

标签: r split rename multiple-columns

我有一个大型数据集(1Gb),如下所示:

Column1  Column2  Column3
ID1      1:2=2.3  2:3=7
ID2      1:2=3.2  2:3=8
ID3      1:2=6.5  2:3=10

由此,我想创建一个新的数据集:

Column1  1:2  2:3
ID1      2.3  7
ID2      3.2  8
ID3      6.5  0

基本上,我需要根据“=”分离数据框,删除新列,只保留值并用1:2,2:3重新命名列(无需使用colnames函数因为我有数百列。)

我正在考虑创建一个循环或函数,它会使用str_split_fixed拆分列,并将所需的列合并为一个新的数据帧。

我在想应该有一个更简单的方法。 任何想法都将不胜感激!

2 个答案:

答案 0 :(得分:2)

这是一种方法,

nms <- sapply(df[-1], function(i)unique(sub('=.*', '', i)))
df[-1] <- lapply(df[-1], function(i)sub('.*=', '', i))
names(df)[-1] <- nms
df
#  Column1 1:2 2:3
#1     ID1 2.3   7
#2     ID2 3.2   8
#3     ID3 6.5   9

数据

structure(list(Column1 = c("ID1", "ID2", "ID3"), Column2 = c("1:2=2.3", 
"1:2=3.2", "1:2=6.5"), Column3 = c("2:3=7", "2:3=8", "2:3=9")), .Names = c("Column1", 
"Column2", "Column3"), row.names = c(NA, -3L), class = "data.frame")

答案 1 :(得分:1)

df = data.frame(Column1=c("ID1","ID2","ID3"), Column2=c("A:B=2.3","A:B=3.2","A:B=6.5"), Column3 =c("D:E=7","D:E=8","D:E=9"))
new = data.frame(df$Column1, apply(df[,c("Column2","Column3")], 2, function(x) str_extract(x, "\\d+\\.*\\d*")))
colnames(new) = c("Column1", "Column2", "Column3")