从数据框列中查找索引或唯一值

时间:2018-12-20 10:31:18

标签: r dataframe

我有一个数据框

TableName Function Argument
A         func1    3
B         func1    4
A         func2    6
B         func2    2
C         func1    5

我想首先在数据框中找出唯一的TableName,使用唯一函数很简单。但是,我还需要将unique的索引映射到值。

TableName Index
A         1 3
B         2 4
C         5

稍后,我想读取此输出以获取唯一的TableName值(例如A),然后使用与之对应的每个索引(依次为1和3)来执行某些操作。

请给我建议一种方法。

4 个答案:

答案 0 :(得分:2)

这是一个<div class="pane-content">解决方案,其中我们使用dplyr创建一个变量,并将其用作我们的索引,即

row_number()

给出,

df %>% 
 mutate(new = row_number()) %>% 
 group_by(TableName) %>% 
 summarise(Index = toString(new))

您还可以将它们另存为列表而不是字符串,这将使以后的操作变得更容易,例如

# A tibble: 3 x 2
  TableName Index
  <fct>     <chr>
1 A         1, 3 
2 B         2, 4 
3 C         5    

给出,

df %>% 
 mutate(new = row_number()) %>% 
 group_by(TableName) %>% 
 summarise(Index = list(new))

答案 1 :(得分:2)

不需要任何包装。试试:

aggregate(rownames(df) ~ TableName, df, c)
  TableName rownames(df)
1         A         1, 3
2         B         2, 4
3         C            5
# or
setNames(aggregate(rownames(df) ~ TableName, df, c),
         c("TableName", "Index"))
  TableName Index
1         A  1, 3
2         B  2, 4
3         C     5

答案 2 :(得分:1)

我建议只使用其中之一

(vec <- tapply(df$Argument, df$TableName, FUN = `identity`))
# $A
# [1] 3 6
#
# $B
# [1] 4 2
#
# $C
# [1] 5

(dfNew <- data.frame(TableName = unique(df$TableName), Index = vec))
#   TableName Index
# A         A  3, 6
# B         B  4, 2
# C         C     5

vec是一个列表(而不是带有连接数字的字符),可以轻松访问names(vec),例如,

vec$A
# [1] 3 6

dfNew是一个数据框,其第二列也是列表:

dfNew[2]
#   Index
# A  3, 6
# B  4, 2
# C     5

dfNew[,2]
# [[1]]
# [1] 3 6
#
# [[2]]
# [1] 4 2
#
# [[3]]
# [1] 5

dfNew[2]["A",][[1]]
# [1] 3 6

但是,在这种情况下,通过TableName到达索引并不方便,所以我坚持使用vec

答案 3 :(得分:1)

使用data.table

setDT(data)[, .(Index = toString(.I)), TableName]
   TableName Index
1:         A  1, 3
2:         B  2, 4
3:         C     5