R 使用正则表达式 select data.frame 中的所有字段
R use regex to select all fields in data.frame
我需要在 R 中用 write.table 保存一个 data.table。问题是一些值(从互联网上下载)只有一个 "。我不能选择不同的引号字符,正如我在 read.table 中所做的那样(我认为这很糟糕)。所以我读过关于使用 gsub() 到 select 所有字段,并替换它们添加不同的引号,最后使用 quote =F in write.table (with sep="\t").
假设这是我的 table:
field1 field2 field3
valueA valueB valueC
valueD valueE valueF
valueG value\"H valueI
因为 \" in value\"H 我在引用时遇到问题,需要一个不同的引号,一个我确定不会出现在文件其他任何地方的字符,比如说,一个汉字。所以,我想用 gsub:
乃field1乃 乃field2乃 乃field3乃
乃valueA乃 乃valueB乃 乃valueC乃
乃valueD乃 乃valueE乃 乃valueF乃
乃valueG乃 乃value\"H乃 乃valueI乃
但是我如何 select 使用 gsub() 的所有字段?我找不到正确的正则表达式。提前致谢!
你可以试试paste
df1[] <- lapply(df1, function(x) paste0('乃', x, '乃'))
df1
# field1 field2 field3
#1 乃valueA乃 乃valueB乃 乃valueC乃
#2 乃valueD乃 乃valueE乃 乃valueF乃
#3 乃valueG乃 乃value"H乃 乃valueI乃
数据
df1 <- structure(list(field1 = c("valueA", "valueD", "valueG"),
field2 = c("valueB",
"valueE", "value\"H"), field3 = c("valueC", "valueF", "valueI"
)), .Names = c("field1", "field2", "field3"), row.names = c(NA,
-3L), class = "data.frame")
只是为了完整性(通过 paste
的 akrun 版本在这里更合适),这是一个使用 gsub
:
df <- read.table(text='field1 field2 field3
valueA valueB valueC
valueD valueE valueF
valueG value\"H valueI')
as.data.frame( lapply(df, function(x) gsub("(.*)","乃\1乃",x)) )
# V1 V2 V3
# 1 乃field1乃 乃field2乃 乃field3乃
# 2 乃valueA乃 乃valueB乃 乃valueC乃
# 3 乃valueD乃 乃valueE乃 乃valueF乃
# 4 乃valueG乃 乃value"H乃 乃valueI乃
我需要在 R 中用 write.table 保存一个 data.table。问题是一些值(从互联网上下载)只有一个 "。我不能选择不同的引号字符,正如我在 read.table 中所做的那样(我认为这很糟糕)。所以我读过关于使用 gsub() 到 select 所有字段,并替换它们添加不同的引号,最后使用 quote =F in write.table (with sep="\t").
假设这是我的 table:
field1 field2 field3
valueA valueB valueC
valueD valueE valueF
valueG value\"H valueI
因为 \" in value\"H 我在引用时遇到问题,需要一个不同的引号,一个我确定不会出现在文件其他任何地方的字符,比如说,一个汉字。所以,我想用 gsub:
乃field1乃 乃field2乃 乃field3乃
乃valueA乃 乃valueB乃 乃valueC乃
乃valueD乃 乃valueE乃 乃valueF乃
乃valueG乃 乃value\"H乃 乃valueI乃
但是我如何 select 使用 gsub() 的所有字段?我找不到正确的正则表达式。提前致谢!
你可以试试paste
df1[] <- lapply(df1, function(x) paste0('乃', x, '乃'))
df1
# field1 field2 field3
#1 乃valueA乃 乃valueB乃 乃valueC乃
#2 乃valueD乃 乃valueE乃 乃valueF乃
#3 乃valueG乃 乃value"H乃 乃valueI乃
数据
df1 <- structure(list(field1 = c("valueA", "valueD", "valueG"),
field2 = c("valueB",
"valueE", "value\"H"), field3 = c("valueC", "valueF", "valueI"
)), .Names = c("field1", "field2", "field3"), row.names = c(NA,
-3L), class = "data.frame")
只是为了完整性(通过 paste
的 akrun 版本在这里更合适),这是一个使用 gsub
:
df <- read.table(text='field1 field2 field3
valueA valueB valueC
valueD valueE valueF
valueG value\"H valueI')
as.data.frame( lapply(df, function(x) gsub("(.*)","乃\1乃",x)) )
# V1 V2 V3
# 1 乃field1乃 乃field2乃 乃field3乃
# 2 乃valueA乃 乃valueB乃 乃valueC乃
# 3 乃valueD乃 乃valueE乃 乃valueF乃
# 4 乃valueG乃 乃value"H乃 乃valueI乃