从R

时间:2016-06-06 07:58:12

标签: r dataframe whitespace

我已经删除了一些数据并将其存储在数据框中。某些行包含方括号内的不需要的信息。示例“[N]团队名称”。 我想保留包含团队名称的部分,所以首先我使用下面的代码删除括号及其中包含的任何文本

gsub( " *\\(.*?\\) *", "", x)

这给我留下了“团队名称”(注意T之前的空格)。 现在我尝试使用trimws或here显示的方法删除T之前的空格,但它不起作用

有人可以帮我删除多余的空白区域。

注意:如果我手动编写包含空格的字符串并在其上应用trimws,它就可以工作。但是,当直接从数据框中获取字符串时,它不会。另外,当运行下面的代码片段(其中df [1,1]是从数据帧中检索的相同字符串时),我得到FALSE。这让我有理由相信数据框中的字符串与手动输入的字符串不同。

" team name" == df[1,1]

3 个答案:

答案 0 :(得分:3)

你可以尝试

gsub( "\\[[^]]*\\]\\W*", "", "[N] Team Name")

答案 1 :(得分:1)

您应该能够使用单个正则表达式替换删除括号中的以及任何后续空格。你的正则表达式是正确的,并应成功完成此任务。 (注意:我忽略了你在问题中使用括号方括号之间无法解释的差异。我已经为我的答案假设了方括号。)

奇怪的是,这似乎是默认正则表达式引擎失败的情况,但添加perl=T会使其正常工作:

x <- '[N] Team Name';
gsub(' *\\[.*?\\] *','',x);
## [1] " Team Name"
gsub(perl=T,' *\\[.*?\\] *','',x);
## [1] "Team Name"

在过去,我遇到了默认正则表达式引擎崩溃的情况,但我从未在perl=T遇到过这种情况,所以我建议你使用它。我真的认为默认的正则表达式实现中存在一些问题。

答案 2 :(得分:0)

我们可以使用

next

或者只是

In [7]:
import csv
with open (r'c:\data\csv_test.csv') as csvfile:
    csv_reader = csv.reader(csvfile)
    csv_headings = next(csv_reader)
    print (csv_headings)
    first_row = next(csv_reader)
    print( 'first row: ', first_row)


['column_1', 'column_2', 'column_3']
first row:  ['2175', '294', 'Nuristan']

数据

sub(".*\\]\\s+", "", x)
#[1] "Team Name"