根据你“进口后”的标准,你的回避apply
和家庭条件似乎很随意。我会对你的逻辑感兴趣。
无论如何,在您已经导入符合您的特殊条件的数据后,这里有一个解决问题的替代方法:
- 创建一个
class
可供家庭和家庭使用colClasses
的新产品。read.table
- 用于
do.call(paste, ...)
将现有data.frame
的折叠到制表符分隔的字符向量。
- 重新读取该字符向量,指定
colClasses
这个时间。
以下是上面的例子:
setClass("spc") ## Strip punctuation and return a character vector
setAs("character", "spc", function(from)
gsub("[[:punct:]]", "", from))
setClass("spn") ## Strip punctuation and return a numeric vector
setAs("character", "spn", function(from)
as.numeric(gsub("[[:punct:]]", "", from)))
## Use those `class`es in `colClasses`
out2 <- read.delim(text = do.call(paste, c(df, sep = "\t")),
header = FALSE, colClasses = c("spc", "spn", "spc"))
str(out2)
# 'data.frame': 3 obs. of 3 variables:
# $ V1: chr "David" "Mark" "Alice"
# $ V2: num 5000 1000 5055
# $ V3: chr "KS" "FL" "CA"
或者,如果任何表格形式就足够了,您可以将数据转换为 amatrix
并gsub
在其上使用。
gsub("[[:punct:]]", "", as.matrix(df))
# name income state
# [1,] "David" "5000" "KS"
# [2,] "Mark" "1000" "FL"
# [3,] "Alice" "5055" "CA"