根据条件拆分多列并重命名
Split multiple columns based on condition and rename
我有一个大型数据集 (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
拆分列并将所需的列合并到一个新的数据框中。
我认为应该有更简单的方法。
如有任何想法,我们将不胜感激!
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")
这是一种方法,
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")
我有一个大型数据集 (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
拆分列并将所需的列合并到一个新的数据框中。
我认为应该有更简单的方法。 如有任何想法,我们将不胜感激!
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")
这是一种方法,
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")