在data.frame中查找字符串

时间:2016-09-12 12:10:20

标签: r string dataframe

如何在data.frame中搜索字符串?作为一个最小的例子,我如何在这个data.frame中找到'horse'的位置(列和行)?

> df = data.frame(animal=c('goat','horse','horse','two', 'five'), level=c('five','one','three',30,'horse'), length=c(10, 20, 30, 'horse', 'eight'))
> df
  animal level length
1   goat  five     10
2  horse   one     20
3  horse three     30
4    two    30  horse
5   five horse  eight

...所以第4行和第5行的顺序错误。任何可以让我识别出“马”的输出已经转移到第5行的level列和第4行的length列。也许:

> magic_function(df, 'horse')
col       row
'animal', 2
'animal', 3
'length', 4
'level',  5

以下是我想要使用的内容:我有一个非常大的数据框(大约60列,20.000行),其中一些列混淆了某些行。为了找出订单错误的不同方式,眼球太大了,所以搜索会很好。我将使用此信息将数据移动到这些行的正确列。

4 个答案:

答案 0 :(得分:9)

怎么样:

FProcess: IStoppable;

答案 1 :(得分:5)

另一种方式:

l <- sapply(colnames(df), function(x) grep("horse", df[,x]))

$animal
[1] 2 3

$level
[1] 5

$length
[1] 4

如果您希望输出为矩阵:

sapply(l,'[',1:max(lengths(l)))

     animal level length
[1,]      2     5      4
[2,]      3    NA     NA

答案 2 :(得分:1)

另一种方法是:

library(data.table)
library(zoo)
library(dplyr)
library(timeDate)
library(reshape2)
data frame name = tbl_account

首先,转置它:

temp = t(tbl_Account)

然后,将其放入列表中:

temp = list(temp)

这实际上将数据框中的每个观察结果放入一个大型字符串中,允许您一次性搜索整个数据框。

然后进行搜索:

temp[[1]][grep("Horse",temp[[1]])] #brings back the actual value occurrences
grep("Horse", temp[[1]]) # brings back the position of the element in a list it occurs in 

希望这有助于:)

答案 3 :(得分:0)

我们可以得到值等于horse的索引。将其除以行数(nrow)以获取列索引,并按列(ncol)除以获取行索引。

我们使用colnames来获取列名而不是索引。

data.frame(col = colnames(df)[floor(which(df == "horse") / (nrow(df) + 1)) + 1], 
           row = floor(which(df == "horse") / ncol(df)) + 1)

#   col   row
#1 animal   1
#2 animal   2
#3  level   4
#4 length   5