是否有將數據框拆分爲數字和字母的方法。 例如:我有一個包含以下格式的值柱:將r中的數據幀拆分爲字符和數字
Hamiltion xyx 1324-1562 abc
我想要的號碼爲單獨的列和數字到不同的列之前採取的數據。 我試過使用gsub()和sub(),但它們返回空。 請幫忙!
是否有將數據框拆分爲數字和字母的方法。 例如:我有一個包含以下格式的值柱:將r中的數據幀拆分爲字符和數字
Hamiltion xyx 1324-1562 abc
我想要的號碼爲單獨的列和數字到不同的列之前採取的數據。 我試過使用gsub()和sub(),但它們返回空。 請幫忙!
來自tidyr
包的separate
函數可能會有用。
# Load package
library(tidyr)
# Create example data frame
dat <- data.frame(Col = "Hamiltion xyx 1324-1562 abc", stringsAsFactors = FALSE)
# Separate the columns into new columns
dat %>%
separate(Col, into = c("Col1", "Col2", "Col3", "Col4"), sep = " ")
# Col1 Col2 Col3 Col4
# 1 Hamiltion xyx 1324-1562 abc
以下是一些解決方案。我們假設下面Note中的測試data.frame用作輸入。
1)使用read.table
分裂空格分開的字段,然後再次read.table
但這次sep = "-"
分裂第三列。
DF2 <- read.table(text = as.character(DF$x), as.is = TRUE)
cbind(DF2[-3], read.table(text = DF2$V3, sep = "-", col.names = c("A", "B")))
,並提供:
V1 V2 V4 A B
1 Hamiltion xyx abc 1324 1562
2 Hamiltion xyx abc 1324 1562
3 Hamiltion xyx abc 1324 1562
在所示列x
是一個因素測試data.frame,但如果它是一個字符列,則as.character
可能已被忽略,雖然它不會,如果你傷把它留在
2)如果圖案位數字只出現在第3欄則這種替代可以工作:
read.table(text = sub("(\\d)-(\\d)", "\\1 \\2", DF$x), as.is = TRUE)
給予:
V1 V2 V3 V4 V5
1 Hamiltion xyx 1324 1562 abc
2 Hamiltion xyx 1324 1562 abc
3 Hamiltion xyx 1324 1562 abc
3)另一種可能性是使用這種模式給出相同的結果(2)
pat <- "^(\\S+) (\\S+) (\\d+)-(\\d+) (\\S+)$"
read.table(text = sub(pat, "\\1 \\2 \\3 \\4 \\5", DF$x), as.is = TRUE)
4)這可以甚至做使用與gsubfn包中的read.pattern
(3)相同的圖案更緊湊地使用:
library(gsubfn)
read.pattern(text = as.character(DF$x), pattern = pat)
注:
# test data.frame
DF <- data.frame(x = rep("Hamiltion xyx 1324-1562 abc", 3))
將有助於提供所需的輸出的一個例子。 – neilfws
請提供一個小數據框的例子,以及所需的輸出 – user31264
Hi sanjana brid,你有另一個用戶帳戶嗎? http://stackoverflow.com/users/7631583如果是這樣,你可能想要合併這兩者 - 詳情請參閱[本幫助中心頁面](http://stackoverflow.com/help/merging-accounts)。謝謝。 – Pang