Проблема с дублированием строк и анализом значений в столбце в R - PullRequest
0 голосов
/ 19 марта 2020

Мне нужно продублировать строку в таблице данных и проанализировать значения в столбце.

Table:     
St  Cty Name Crp  Plan Ins_ID  Yld_ID 
13  19  Ber  75   30   NA      NA    


22273028 21942993 22209124 22213153 22086558 22282068  

Output:
St  Cty Name Crp  Plan Ins_ID        Yld_ID 
13  19  Ber  75   30   22273028      NA
13  19  Ber  75   30   21942993      NA
13  19  Ber  75   30   22209124      NA
13  19  Ber  75   30   22213153      NA
13  19  Ber  75   30   22086558      NA
13  19  Ber  75   30   22282068      NA

Как мне добиться этого в R, используя data.table?

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

В рамках указанных спецификаций проблема становится очень простой.

ins_id_vector <- c(22273028, 21942993, 22209124, 22213153, 22086558, 22282068)  

expanded.table <- data.frame(
  St = Table$St,
  Cty = Table$Cty,
  Name = Table$Name,
  Crp = Table$Crp,
  Plan = Table$Plan,
  Ins_ID = ins_id_vector,
  Yld_ID = Table$Yld_ID
)

В R есть такая вещь, как рециркуляция. Созданный выше фрейм данных имеет все столбцы (St, Cty, Name, Crp, Plan и Yld_ID, содержащие только одно значение, тогда как Ins_ID имеет много значений, поэтому одно значение этих столбцов используется многократно для заполнения всех строк, что облегчает его .

0 голосов
/ 19 марта 2020

Мы можем повторить строки data.table на основе длины вектора и присвоить вектор столбцу.

library(data.table)

setDT(dt)
ins_id <- c(22273028,21942993,22209124,22213153,22086558,22282068)
dt <- dt[rep(1,length(ins_id)), ]
dt[, Ins_ID := ins_id]

dt
#   St Cty Name Crp Plan   Ins_ID Yld_ID
#1: 13  19  Ber  75   30 22273028     NA
#2: 13  19  Ber  75   30 21942993     NA
#3: 13  19  Ber  75   30 22209124     NA
#4: 13  19  Ber  75   30 22213153     NA
#5: 13  19  Ber  75   30 22086558     NA
#6: 13  19  Ber  75   30 22282068     NA

data

dt <- structure(list(St = 13L, Cty = 19L, Name = structure(1L, .Label = "Ber", 
class = "factor"), Crp = 75L, Plan = 30L, Ins_ID = NA, Yld_ID = NA),
class = "data.frame", row.names = c(NA, -1L))
0 голосов
/ 19 марта 2020

Это делает sh то, что вы хотите?

dta <- structure(list(St = 13L, Cty = 19L, Name = "Ber", Crp = 75L, 
    Plan = 30L, Ins_ID = NA, Yld_ID = NA), class = "data.frame",
    row.names = c(NA, -1L))
dta <- data.table(dta)
Ins_ID <- c(22273028, 21942993, 22209124, 22213153, 22086558, 22282068)
dta.new <- data.table(dta[, 1:5], Ins_ID, Yld_ID=dta[, 7])
dta.new
#    St Cty Name Crp Plan   Ins_ID Yld_ID.Yld_ID
# 1: 13  19  Ber  75   30 22273028            NA
# 2: 13  19  Ber  75   30 21942993            NA
# 3: 13  19  Ber  75   30 22209124            NA
# 4: 13  19  Ber  75   30 22213153            NA
# 5: 13  19  Ber  75   30 22086558            NA
# 6: 13  19  Ber  75   30 22282068            NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...