我有一个从.CSV文件中读取的大型数据帧(大约40000 x 500)。数据集包含错误代码组合列表,每个组合专门列出所有唯一代码。我正在搜索包含某段字符串的行,例如"name="
,以查看是否知道谁列出了该组合。问题是我不知道这可能出现在哪一列,因为第10列及以后每行不规则,因为每个组合的错误代码数量是不规则的。这意味着在某些点之后行是空的,除了最大的错误代码组合。我只知道如果行包含我正在寻找的字符串,它将在包含任何信息的行的最后6列之一。如果我正在寻找的那条字符串连续找到,我想在另一列中找到答案。
我已经广泛寻找解决方案,但我找不到满足我需求的任何东西。另外,我是R.的新手。
[Fake dataset]
Year Problem_ID Number.of.errors X X.1 X.2 X.3 X.4
1 2005 Server 2 X-4555 X-1222 name=Sara
2 2011 Hardware 3 X-8922 X-7644 X-6485
3 2015 Software 4 X-8494 X-4321 X-7452 X-5321 name=John
4 2018 Hardware 2 X-6901 X-1121
5 2007 Server 3 X-7655 X-6555 X-8999 name=Sara
[Desired output]
Year Problem_ID Number.of.errors Name X X.1 X.2 X.3 X.4
1 2005 Server 2 1 X-4555 X-1222 name=Sara
2 2011 Hardware 3 0 X-8922 X-7644 X-6485
3 2015 Software 4 1 X-8494 X-4321 X-7452 X-5321 name=John
4 2018 Hardware 2 0 X-6901 X-1121
5 2007 Server 3 1 X-7655 X-6555 X-8999 name=Sara
答案 0 :(得分:2)
选项#1:
您可以按照@RomanLuštrik的建议使用apply
获取name
列。必须使用name=
和any
检查该行中的任何列是否与grep
匹配的文字。解决方案如下:
df$name <- apply(df, 1, function(x)as.integer(any(grep("name=",x))))
df
# Year Problem_ID Number.of.errors X X.1 X.2 X.3 X.4 name
# 1 2005 Server 2 X-4555 X-1222 name=Sara <NA> <NA> 1
# 2 2011 Hardware 3 X-8922 X-7644 X-6485 <NA> <NA> 0
# 3 2015 Software 4 X-8494 X-4321 X-7452 X-5321 name=John 1
# 4 2018 Hardware 2 X-6901 X-1121 <NA> <NA> <NA> 0
# 5 2007 Server 3 X-7655 X-6555 X-8999 name=Sara <NA> 1
选项#2:强>
如果OP
仅对包含name=
文字的行感兴趣,那么它将成为用户csv
行,然后过滤掉包含name=
的行。
All_lines <- readLines(file_name)
desired_lines <- grep("name=", All_lines, value = TRUE)
desired_lines
只获得包含name=
的行。
数据:强>
df <- read.table(text =
"Year Problem_ID Number.of.errors X X.1 X.2 X.3 X.4
1 2005 Server 2 X-4555 X-1222 name=Sara NA NA
2 2011 Hardware 3 X-8922 X-7644 X-6485 NA NA
3 2015 Software 4 X-8494 X-4321 X-7452 X-5321 name=John
4 2018 Hardware 2 X-6901 X-1121 NA NA NA
5 2007 Server 3 X-7655 X-6555 X-8999 name=Sara NA",
header = TRUE, stringsAsFactors = FALSE)