Как подсчитать, сколько раз символ «x» сообщается в столбце «ID», и сообщать показатель веса для каждой строки? - PullRequest
2 голосов
/ 11 мая 2019
> head(mini)
   ID        sequence class     
1:   3930271        0  A63B   
2:   3930272        0  A47D     
3:   3930272        1  Y10T 
4:   3930273        0  A61G    
5:   3930273        1  A61G    
6:   3930274        0  B63B   

Я хотел бы вычислить вес каждого класса для соответствующего идентификатора.Поэтому мне нужно было бы подсчитать количество классов для каждого идентификатора, а затем назначить простой вес значения для каждого класса.Например, у ID 3930272 есть два класса, и я хотел бы иметь новый столбец, в котором в качестве веса класса для идентификатора будет указано 0,5.Визуализация здесь ниже:

   ID        sequence class  weight  
1:   3930271        0  A63B       1
2:   3930272        0  A47D     0.5
3:   3930272        1  Y10T     0.5
4:   3930273        0  A61G     0.5
5:   3930273        1  A61G     0.5
6:   3930274        0  B63B       1

Обратите внимание, что ID 3930273 имеет два идентичных класса, но я все еще хочу видеть вес 0,5 для этого класса.Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

Поскольку вы используете data.table, вот быстрый однострочный:

mini[, weight := 1/.N, by = "ID"]
mini
#         ID sequence class weight
# 1: 3930271        0  A63B    1.0
# 2: 3930272        0  A47D    0.5
# 3: 3930272        1  Y10T    0.5
# 4: 3930273        0  A61G    0.5
# 5: 3930273        1  A61G    0.5
# 6: 3930274        0  B63B    1.0

Данные:

mini <- read.table(header=T, stringsAsFactors=F, text='
   ID        sequence class     
1:   3930271        0  A63B   
2:   3930272        0  A47D     
3:   3930272        1  Y10T 
4:   3930273        0  A61G    
5:   3930273        1  A61G    
6:   3930274        0  B63B   ')
data.table::setDT(mini)
2 голосов
/ 11 мая 2019

С помощью dplyr вы группируете по идентификатору, а затем вычисляете вес, деля 1 на количество строк этого идентификатора:

library(dplyr)
mini = mini %>%
  group_by(ID) %>%
  mutate(weight = 1/n()) %>%
  ungroup()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...