在数据帧上使用 gsub()

Bra*_*don 3 formatting r gsub dataframe data-cleaning

我有一个名为 test_20171122 的 CSV 数据文件

数据集的图像

通常,我使用的数据集最初是 Excel 中的会计或货币格式,后来转换为 CSV 文件。

我正在研究使用 gsub() 在 R 中将数据从会计格式“$##,###”清理到数字“####”的最佳方法。

我的问题在于 gsub() 跨数据集的所有列的迭代。我的第一直觉是在整个数据帧(如下)上运行 gsub() ,但它似乎以适得其反的方式改变了数据。

gsub("\\$", "", test_20171122)
Run Code Online (Sandbox Code Playgroud)

以下代码是一个似乎完成工作的 for 循环。

for (i in 1:length(test_20171122)){
clean1 <- gsub("\\$","",test_20171122[[1]])
clean2 <- gsub("\\,","",clean1)
test_20171122[,i] <- clean2
i = i + 1 
}
Run Code Online (Sandbox Code Playgroud)

我试图找出使用 gsub() 清理数据帧的最佳方法。我觉得 sapply() 会起作用,但是当我运行以下代码时,它似乎破坏了数据帧的结构:

test_20171122 <- sapply(test_20171122,function(x) gsub("\\$","",x))
test_20171122 <- sapply(test_20171122,function(x) gsub("\\,","",x))
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 6

您可以在 中使用以下模式gsub"[$,]"

例子:

df <- data.frame(
  V1 = c("$1,234.56", " $ 23,456.70"),
  V2 = c("$89,101,124", "15,234")
)
df
#             V1          V2
# 1    $1,234.56 $89,101,124
# 2  $ 23,456.70      15,234

df[] <- lapply(df, function(x) as.numeric(gsub("[$,]", "", x)))
df
#         V1       V2
# 1  1234.56 89101124
# 2 23456.70    15234
Run Code Online (Sandbox Code Playgroud)

  • 两个问题:1)为什么是“函数(x)”?另外2)是否有理由写“df[]”而不只是“df”? (2认同)