如何在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行),其中一些列混淆了某些行。为了找出订单错误的不同方式,眼球太大了,所以搜索会很好。我将使用此信息将数据移动到这些行的正确列。
答案 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