如何基于组而不是组内创建重复索引

时间:2019-07-17 17:25:32

标签: r

我有一个具有以下数字的索引(5、10、15、17)。该索引是从大型csv文件生成的,并且与该文件中这些短语的顺序相对应。最终,id希望将这些短语与循环生成的新列映射回去。

每个索引都与一个短语相关联。我的代码分隔了短语,并根据短语中的单词创建了列。我需要在数据框中创建另一列,并使用与每个短语对应的索引号。

For example: 
    column 1          column 2            index
    phrase A            book                5
    phrase A            tree                5
    phrase B            tree                10

我如何在循环中获得此结果,并确保索引随着第1列中的每个新输入而变化。

2 个答案:

答案 0 :(得分:3)

像这样吗?

Events.on(EventNames.HELLO_WORLD, () => {});

数据创建代码。

index_by <- function(DF, group, index_list = NULL){
  f <- ave(as.character(DF[[group]]), DF[[group]], FUN = function(x) rnorm(1))
  i <- as.integer(factor(f, levels = unique(f)))
  if(is.null(index_list)) i else index_list[i]
}

df1$index <- index_by(df1, "column1")
df1$index2 <- index_by(df1, "column1", c(5, 10, 15, 17))

df1
#    column1 index index2
#1  phrase 1     1      5
#2  phrase 1     1      5
#3  phrase 1     1      5
#4  phrase 1     1      5
#5  phrase 2     2     10
#6  phrase 2     2     10
#7  phrase 3     3     15
#8  phrase 3     3     15
#9  phrase 3     3     15
#10 phrase 4     4     17

答案 1 :(得分:1)

您可以在tidyverse中使用group_indices()。这是一个将制造商设置的mpg数据分组的示例。

library(tidyverse)

mpgGroupNbr <- mpg %>%
  arrange(manufacturer) %>%
  group_by(manufacturer) %>% 
  mutate(groupNbr = group_indices()*5)

#check coding - max/min should be the same if coded correctly
mpgGroupNbr %>% 
  group_by(manufacturer) %>%
  summarize(max = max(groupNbr), min = min(groupNbr))

结果:

   manufacturer   max   min
    <chr>        <dbl> <dbl>
 1 audi             5     5
 2 chevrolet       10    10
 3 dodge           15    15
 4 ford            20    20
 5 honda           25    25
 6 hyundai         30    30
 7 jeep            35    35
 8 land rover      40    40
 9 lincoln         45    45
10 mercury         50    50
11 nissan          55    55
12 pontiac         60    60
13 subaru          65    65
14 toyota          70    70
15 volkswagen      75    75