我有一个数据框,其中包含多个列,所有列都是字符类型。所有值都用双引号括起来,我想要移除这些引号。
例子:
例子:
df1 df2
"1203" "Name1"
"2304" "Name2"
df1 df2
"1203" "Name1"
"2304" "Name2"
print()
方法有一个quote=
选项,可以将其设置为FALSE
:print.data.frame(data.frame(x=c("Hello", "World")),
quote=FALSE)
# x
# 1 Hello
# 2 World
另请参见?print.data.frame
(=帮助)
编辑:
关于下面评论中的 dput
数据:
as.data.frame(sapply(df, function(x) gsub("\"", "", x)))
df <- data.frame(df=c("1203", "2304"), df2=c("Name1", "Name2"), stringsAsFactors=FALSE); print(df, quote=FALSE); print(df, quote=TRUE)
运行正常。 - lukeAdput()
发布您的数据框,以便其他人可以检查它。 - lukeAprint(as.data.frame(sapply(df,function(x) gsub("\"","",x))))
删除并打印它们。 - lukeA自从dplyr 1.0.0版本以来,你可以使用来自purrr的新across
语法,这使得对于我们许多人来说更易读。
df <- structure(list(Col1 = c("\"2515\"", "\"3348\"", "\"3370\""), Col2 = c("\"06/25/2013\"", "\"12/26/2013\"", "\"12/30/2013\"" )), .Names = c("Col1", "Col2"), row.names = c(NA, 3L), class = "data.frame")
df
Col1 Col2
1 "2515" "06/25/2013"
2 "3348" "12/26/2013"
3 "3370" "12/30/2013"
df %>%
mutate(across(
everything(),
~ map_chr(.x, ~ gsub("\"", "", .x))
))
Col1 Col2
1 2515 06/25/2013
2 3348 12/26/2013
3 3370 12/30/2013
across
语法的优点在于它不仅易读,而且非常灵活。您可以使用一系列其他方法来引用列,而不是使用everything()
来表示所有列,例如:
Col1, Col2
)is.numeric
、is.character
)starts_with("Col")
、contains("Col"
)LukeA的答案将我的整个数据框转换为字符格式,所以我实现了这个修改,只修改字符类别的列:
character_cols = which(sapply(x, class) == 'character')
for(i in 1:length(character_cols)) {
a = character_cols[i]
x[,a] = gsub("\"", "", x[,a])
}
data.frame
而不是一个matrix
吗? - A5C1D2H2I1M1N2O1R2T1noquote
函数。 - Jota