как создать новый столбец на основе заданного интервала c - PullRequest
1 голос
/ 27 марта 2020

Я хотел бы создать новый столбец в моем фрейме данных на основе интервалов в другом столбце "dim"

, например:

мой набор данных:

df1
id dim
1  25
2  34
3  60
4  65
5  80
6  82
7  90
8  95
9  110
10 120

I would like the follow data set below using the interval by 20 (my column begin with 25 for a new column x
factors: 25:44 = 1 45=64= 2 and so on...
df2
id dim x
1  25  1
2  34  1
3  60  2
4  65  3
5  80  3
6  82  3
7  90  4
8  95  4
9  110 5
10 120 5 

кто-нибудь может мне помочь с этим?

Ответы [ 3 ]

1 голос
/ 27 марта 2020

Мы можем использовать %/% для разницы между 'dim' и значением first для 'dim'

library(dplyr)
df %>% 
   mutate(x = (dim - first(dim)) %/% 20 + 1)
#   id dim x
#1   1  25 1
#2   2  34 1
#3   3  60 2
#4   4  65 3
#5   5  80 3
#6   6  82 3
#7   7  90 4
#8   8  95 4
#9   9 110 5
#10 10 120 5

или опцией с findInterval

df %>% 
   mutate(x = findInterval(dim, seq(20, length.out = n(), by = 20), all.inside = TRUE))

данные

df <- structure(list(id = 1:10, dim = c(25, 34, 60, 65, 80, 82, 90, 
95, 110, 120)), class = "data.frame", row.names = c(NA, -10L))
1 голос
/ 27 марта 2020

Вот решение tidyverse с использованием cut.

library(tidyverse)
df %>%
  mutate(x = cut(dim, 
                 #Add 1 to the maximum value in dim to make sure it is included in the categorization.
                 breaks = seq(min(dim),max(dim)+1,20),
                 #Set this to T to include the lowest value
                 include.lowest = T,
                 #To set labels as a sequence of integers
                 labels = F))

#   id dim x
#1   1  25 1
#2   2  34 1
#3   3  60 2
#4   4  65 2
#5   5  80 3
#6   6  82 3
#7   7  90 4
#8   8  95 4
#9   9 110 5
#10 10 120 5
1 голос
/ 27 марта 2020

Вы можете сделать это с помощью floor и некоторой математики:

df <- data.frame(id = 1:10, dim = c(25, 34, 60, 65, 80, 82, 90, 95, 110, 120))
df$x <- floor((df$dim - min(df$dim)) / 20) + 1

#   id dim x
#1   1  25 1
#2   2  34 1
#3   3  60 2
#4   4  65 3
#5   5  80 3
#6   6  82 3
#7   7  90 4
#8   8  95 4
#9   9 110 5
#10 10 120 5

Вычтите самую маленькую запись в df$dim, чтобы начать свою первую категорию; разделите на 20, чтобы получить размер интервала; возьмите слово, чтобы округлить вниз, и добавьте 1, чтобы сдвинуть все соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...