使用 R 将某些特殊字符如 @ 或 - 替换为它们的实际单词 "at" 和 "dash"
Replacing certain special characters like @ or - with their actual words "at" and "dash" using R
我一直在研究 R 中的一些数据清理程序,但遇到了 运行 问题。我正在尝试用对应的字符 "at".
替换“@”等特殊字符
我试过sub
、gsub
和setNames
甚至replace
。
所有这些都会产生相同的结果:它只是在我的数据中给了我大量的 NA
。
我有一个我的数据样例,仅供参考。
试想一下,我看不到所有@符号在哪里,我想搜索整个数据集并将它们全部替换。我的实际数据集有 50 列,因此按列排序是行不通的。
################## 编辑 ########### #######
aa <- read.csv("C:/Users/Zander Kent/Documents/Data Cleaning/sample dataset.csv", header = T, na.strings=c("", " ","NA"))
aaa <- data.frame(aa)
abc <- as.data.frame(apply(aaa, 2, function(x) gsub(" @ ", "at", x)))
write.csv(abc, file="C:/Users/Zander Kent/Documents/Data Cleaning/clean_2.csv")
link 到 google.drive 中的数据
Sample Data
我尝试了其中一个答案,它适用于非常小的 10x10 数据集,但是当我在我的整个数据集上尝试它时,它什么也没做。所有特殊字符都还在那里。代码 运行 没有任何错误消息,没有任何问题。
缺乏可重现的例子...
让我们用不需要的符号创建一个向量:
a <- data.frame(x = c("1", "a", "3@"), y = c("5@", "2", "b"))
现在我们可以使用gsub
:
as.data.frame(apply(a, 2, function(x) gsub("@", "at", x)))
并获得:
## x y
## 1 1 5at
## 2 a 2
## 3 3at b
####### 编辑#####
如果你想用"dash"替换“-”,那么qdap
包中有一个很好的函数。让我们用两个坏人重新创建向量:
a <- data.frame(x = c("1-", "a", "3@"), y = c("5@", "2", "b-"))
然后我们做:
require(qdap)
as.data.frame(apply(a, 2, function(x) multigsub(c("@", "-"),
c("at", "dash"),
x))
####### 编辑 2 #######
这有效,而且相当大:
x <- sample(LETTERS, 1e6, TRUE)
y <- sample(c("", "", "", "@", "-"), 1e6, TRUE)
a <- data.frame(x, y)
b <- apply(a, 1, function(x) paste(x, collapse = ""))
df <- as.data.frame(matrix(b, ncol=50))
df[1:4, 1:10]
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 T V- H L T K@ M T@ M- I
2 G W F@ K@ W@ T@ R X- G G-
3 R E@ V O@ R D L L C- B
4 T G@ J U X H@ Q Q T Z@
df2 <- apply(df, 2, function(x) multigsub(c("@", "-"), c("at", "dash"), x))
grep("-", df2)
integer(0)
grep("@", df2)
integer(0)
df2[1:4, 1:10]
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
[1,] "T" "Vdash" "H" "L" "T" "Kat" "M" "Tat" "Mdash" "I"
[2,] "G" "W" "Fat" "Kat" "Wat" "Tat" "R" "Xdash" "G" "Gdash"
[3,] "R" "Eat" "V" "Oat" "R" "D" "L" "L" "Cdash" "B"
[4,] "T" "Gat" "J" "U" "X" "Hat" "Q" "Q" "T" "Zat"
我一直在研究 R 中的一些数据清理程序,但遇到了 运行 问题。我正在尝试用对应的字符 "at".
替换“@”等特殊字符我试过sub
、gsub
和setNames
甚至replace
。
所有这些都会产生相同的结果:它只是在我的数据中给了我大量的 NA
。
我有一个我的数据样例,仅供参考。
试想一下,我看不到所有@符号在哪里,我想搜索整个数据集并将它们全部替换。我的实际数据集有 50 列,因此按列排序是行不通的。
################## 编辑 ########### #######
aa <- read.csv("C:/Users/Zander Kent/Documents/Data Cleaning/sample dataset.csv", header = T, na.strings=c("", " ","NA"))
aaa <- data.frame(aa)
abc <- as.data.frame(apply(aaa, 2, function(x) gsub(" @ ", "at", x)))
write.csv(abc, file="C:/Users/Zander Kent/Documents/Data Cleaning/clean_2.csv")
link 到 google.drive 中的数据 Sample Data
我尝试了其中一个答案,它适用于非常小的 10x10 数据集,但是当我在我的整个数据集上尝试它时,它什么也没做。所有特殊字符都还在那里。代码 运行 没有任何错误消息,没有任何问题。
缺乏可重现的例子...
让我们用不需要的符号创建一个向量:
a <- data.frame(x = c("1", "a", "3@"), y = c("5@", "2", "b"))
现在我们可以使用gsub
:
as.data.frame(apply(a, 2, function(x) gsub("@", "at", x)))
并获得:
## x y
## 1 1 5at
## 2 a 2
## 3 3at b
####### 编辑#####
如果你想用"dash"替换“-”,那么qdap
包中有一个很好的函数。让我们用两个坏人重新创建向量:
a <- data.frame(x = c("1-", "a", "3@"), y = c("5@", "2", "b-"))
然后我们做:
require(qdap)
as.data.frame(apply(a, 2, function(x) multigsub(c("@", "-"),
c("at", "dash"),
x))
####### 编辑 2 #######
这有效,而且相当大:
x <- sample(LETTERS, 1e6, TRUE)
y <- sample(c("", "", "", "@", "-"), 1e6, TRUE)
a <- data.frame(x, y)
b <- apply(a, 1, function(x) paste(x, collapse = ""))
df <- as.data.frame(matrix(b, ncol=50))
df[1:4, 1:10]
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 T V- H L T K@ M T@ M- I
2 G W F@ K@ W@ T@ R X- G G-
3 R E@ V O@ R D L L C- B
4 T G@ J U X H@ Q Q T Z@
df2 <- apply(df, 2, function(x) multigsub(c("@", "-"), c("at", "dash"), x))
grep("-", df2)
integer(0)
grep("@", df2)
integer(0)
df2[1:4, 1:10]
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
[1,] "T" "Vdash" "H" "L" "T" "Kat" "M" "Tat" "Mdash" "I"
[2,] "G" "W" "Fat" "Kat" "Wat" "Tat" "R" "Xdash" "G" "Gdash"
[3,] "R" "Eat" "V" "Oat" "R" "D" "L" "L" "Cdash" "B"
[4,] "T" "Gat" "J" "U" "X" "Hat" "Q" "Q" "T" "Zat"