Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 月份错误。abb[]:仅0';s可以与负下标混合_R_Data.table_Data Wrangling - Fatal编程技术网

R 月份错误。abb[]:仅0';s可以与负下标混合

R 月份错误。abb[]:仅0';s可以与负下标混合,r,data.table,data-wrangling,R,Data.table,Data Wrangling,我想把数字转换成月份;对于大于12的数字,请在月份前添加“第二年”。数据如下: 库(tidyverse) 库(数据表) 图书馆(dplyr) rg1)fifelse将在每个月的所有注册值下对两条腿进行评估。如果不希望对两个支腿进行计算,或确保下标在month.abb内对所有注册值有效,请避免使用fifelse或ifelse 这种方法只能使用ifelse设置“第二年”字符串 3)或在每个分支中将注册月份替换为(注册月份-1)%%12+1,以将所有值映射到1-12范围 rg[,.(month_rg2

我想把数字转换成月份;对于大于12的数字,请在月份前添加“第二年”。数据如下:

库(tidyverse)
库(数据表)
图书馆(dplyr)
rg1)fifelse将在每个月的所有注册值下对两条腿进行评估。如果不希望对两个支腿进行计算,或确保下标在month.abb内对所有注册值有效,请避免使用fifelse或ifelse

这种方法只能使用ifelse设置“第二年”字符串

3)或在每个分支中将
注册月份
替换为
(注册月份-1)%%12+1
,以将所有值映射到1-12范围

rg[,.(month_rg2 = fifelse(registration_month<= 12, 
      month.abb[(registration_month - 1) %% 12 + 1], 
      paste0("2nd Year ", month.abb[(registration_month - 1) %% 12 + 1])))] 

rg[,(month\u rg2=fifelse(registration\u month也许,你可以试试这个-

library(data.table)

rg[, month_rg2 := month.abb[fifelse(registration_month<= 12, 
                             registration_month, registration_month - 12)]]

rg[registration_month > 12 , month_rg2 := paste('2nd year', month_rg2)]
rg

              id registration_month  region operating_system    month_rg2
#    1: id_10033                  1    EMEA          Windows          Jan
#    2: id_10050                  1     ROW          Unknown          Jan
#    3: id_10054                  1    EMEA          Windows          Jan
#    4: id_10080                  1     ROW          Unknown          Jan
#    5: id_10098                  1     ROW          Windows          Jan
#   ---                                                                  
#40122:  id_9868                 21    EMEA              Mac 2nd year Sep
#40123:  id_9885                 21     ROW          Unknown 2nd year Sep
#40124:  id_9888                 21     ROW          Windows 2nd year Sep
#40125:  id_9905                 21     ROW          Unknown 2nd year Sep
#40126:  id_9919                 21 America          Windows 2nd year Sep
库(data.table)
rg[,month_rg2:=month.abb[fifelse(注册第12个月,month_rg2:=粘贴(第2年,month_rg2)]
rg
id注册\u月区域操作\u系统月\u rg2
#1:id_10033 1 EMEA Windows 1月
#2:id_10050第1行未知1月
#3:id_10054 1 EMEA Windows 1月
#4:id_10080第1行未知1月
#5:id_10098 1行窗口1月
#   ---                                                                  
#40122:ID986821 EMEA Mac第二年9月
#40123:ID9885第21行未知第2年9月
#40124:ID988821排Windows第二年9月
#40125:id_9905第21行未知第2年9月
#40126:id_9919 21美国Windows第二年9月

fifelse
registration\u month>12
从中减去12,得到相应的月份名称。同时
粘贴到这些月份名称上。

您可以使用
sapply

rg[,.(month_rg2 = sapply(registration_month,
                         function(month) ifelse(month<= 12,
                                                month.abb[month], 
                                                paste0("2nd Year ", month.abb[month-12]))))]

          month_rg2
    1:          Jan
    2:          Jan
    3:          Jan
    4:          Jan
    5:          Jan
   ---             
40122: 2nd Year Sep
40123: 2nd Year Sep
40124: 2nd Year Sep
40125: 2nd Year Sep
40126: 2nd Year Sep
rg[,(月)rg2=sapply(注册月),

函数(月)ifelse(月我们可以使用
FIFEELSE
给出前缀
第二年
,并在
注册月份
中的值上使用
%%
,以确保月数限制在
1
12
范围内,例如

rg[
  ,
  month_rg2 :=
    paste0(
      fifelse(
        registration_month <= 12,
        "",
        "2nd Year "
      ),
      month.abb[(registration_month - 1) %% 12 + 1]
    )
][]
library(data.table)

rg <- structure(list(registration_month = c(1, 2, 3, 4, 5, 6, 7, 8, 
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21), id = c("id_10033", 
"id_10048", "id_10052", "id_10044", "id_10006", "id_10000", "id_10053", 
"id_10008", "id_10016", "id_10002", "id_10", "id_10025", "id_1001", 
"id_1", "id_1000", "id_10009", "id_10005", "id_1002", "id_10051", 
"id_1004", "id_10004"), region = c("EMEA", "EMEA", "EMEA", "EMEA", 
"ROW", "ROW", "ROW", "ROW", "ROW", "EMEA", "ROW", "ROW", "ROW", 
"America", "ROW", "ROW", "ROW", "ROW", "ROW", "ROW", "EMEA"), 
    operating_system = c("Windows", "Windows", "Windows", "Mac", 
    "Unknown", "Windows", "Windows", "Windows", "Unknown", "Linux", 
    "Mac", "Unknown", "Mac", "Windows", "Windows", "Windows", 
    "Mac", "Windows", "Windows", "Windows", "Mac")), row.names = c(NA, 
-21L), class = "data.frame")
rg <- as.data.table(rg)
library(data.table)

rg[, month_rg2 := month.abb[fifelse(registration_month<= 12, 
                             registration_month, registration_month - 12)]]

rg[registration_month > 12 , month_rg2 := paste('2nd year', month_rg2)]
rg

              id registration_month  region operating_system    month_rg2
#    1: id_10033                  1    EMEA          Windows          Jan
#    2: id_10050                  1     ROW          Unknown          Jan
#    3: id_10054                  1    EMEA          Windows          Jan
#    4: id_10080                  1     ROW          Unknown          Jan
#    5: id_10098                  1     ROW          Windows          Jan
#   ---                                                                  
#40122:  id_9868                 21    EMEA              Mac 2nd year Sep
#40123:  id_9885                 21     ROW          Unknown 2nd year Sep
#40124:  id_9888                 21     ROW          Windows 2nd year Sep
#40125:  id_9905                 21     ROW          Unknown 2nd year Sep
#40126:  id_9919                 21 America          Windows 2nd year Sep
rg[,.(month_rg2 = sapply(registration_month,
                         function(month) ifelse(month<= 12,
                                                month.abb[month], 
                                                paste0("2nd Year ", month.abb[month-12]))))]

          month_rg2
    1:          Jan
    2:          Jan
    3:          Jan
    4:          Jan
    5:          Jan
   ---             
40122: 2nd Year Sep
40123: 2nd Year Sep
40124: 2nd Year Sep
40125: 2nd Year Sep
40126: 2nd Year Sep
rg[
  ,
  month_rg2 :=
    paste0(
      fifelse(
        registration_month <= 12,
        "",
        "2nd Year "
      ),
      month.abb[(registration_month - 1) %% 12 + 1]
    )
][]
            id registration_month  region operating_system    month_rg2
    1: id_10033                  1    EMEA          Windows          Jan
    2: id_10050                  1     ROW          Unknown          Jan
    3: id_10054                  1    EMEA          Windows          Jan
    4: id_10080                  1     ROW          Unknown          Jan
    5: id_10098                  1     ROW          Windows          Jan
   ---
40122:  id_9868                 21    EMEA              Mac 2nd Year Sep
40123:  id_9885                 21     ROW          Unknown 2nd Year Sep
40124:  id_9888                 21     ROW          Windows 2nd Year Sep
40125:  id_9905                 21     ROW          Unknown 2nd Year Sep
40126:  id_9919                 21 America          Windows 2nd Year Sep