在一个变量中对多个观察结果进行分类,这样我就可以在新的列中对它们进行分类。如何缩短代码?在R

在一个变量中对多个观察结果进行分类,这样我就可以在新的列中对它们进行分类。如何缩短代码?在R,r,datatable,R,Datatable,我正在寻找一种捷径或更少的劳动密集型方法,将某些观察值分组到同一个变量中,然后根据需要在新列中输出 axa$type[axa$instrument_type == "CORPORATE BONDS" | axa$instrument_type == "GOVERNMENT BONDS"] <- 'BONDS' axa$type[axa$instrument_type == "FOREIGN CURRENCY"] <- 'Cash' axa$type[axa$instrument_ty

我正在寻找一种捷径或更少的劳动密集型方法,将某些观察值分组到同一个变量中,然后根据需要在新列中输出

axa$type[axa$instrument_type == "CORPORATE BONDS" | axa$instrument_type == "GOVERNMENT BONDS"] <- 'BONDS'
axa$type[axa$instrument_type == "FOREIGN CURRENCY"] <- 'Cash'
axa$type[axa$instrument_type == "FUT-FIXED INCOME"] <- 'Derivatives'
axa$type[axa$instrument_type  ==  "INTEREST RATE SWAP"] <- 'Derivatives'
axa$type[axa$instrument_type == "MUTUAL FUNDS"] <- 'Funds'
axa$type[axa$instrument_type == "SHORT TERMS"] <- 'Cash Equivalent'
axa$type[axa$instrument_type == "CMO"] <- 'Other Fi'
axa$type[axa$instrument_type == "NON-SECY ASSET STOCK"] <- 'Other'

axa$type[axa$instrument\u type==“CORPORATE BONDS”\124; axa$instrument\u type==“GOVERNMENT BONDS”]一个更简单的选择是创建一个键/值数据集对,然后进行联接。这是可扩展的,它只需要一个连接,而不需要多次执行
=
和赋值

library(data.table)
keydat <- data.table(instrument_type = c("CORPORATE_BONDS", "FOREIGN_CURRENCY",
    ...), type = c("GOVERNMENT", "Cash",...))

setDT(axa)[keydat, type := i.type, on = .(instrument_type)]
库(data.table)

keydat不是很短,但是在
dplyr
中使用
case\u将使它更干净,并避免每次写入
dataframe\u name$column\u name
。您可以使用%
中的
%而不是
来比较
仪器类型中的多个值

library(dplyr)

axa %>%
   mutate(type = case_when(
      instrument_type %in% c("CORPORATE BONDS","GOVERNMENT BONDS") ~ "BONDS", 
      instrument_type == "FOREIGN CURRENCY" ~ "Cash", 
      instrument_type %in% c("FUT-FIXED INCOME", "INTEREST RATE SWAP") ~ "Derivatives", 
      instrument_type == "MUTUAL FUNDS"~"Funds", 
      instrument_type == "SHORT TERMS" ~ "Cash Equivalent", 
      instrument_type == "CMO" ~"Other Fi", 
      instrument_type == "NON-SECY ASSET STOCK" ~"Other"))

如果对
数据感兴趣。table
解决方案类似于
案例(当
数据中有
fcase
时)。table
可在
数据的开发版本中获得。table

如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的错误,那么就更容易帮助您solutions.btw,它的
data.table
带有点,而不是
datatable
。后者通常指的是
DT
packagesorry我真的不明白这一点。它如何理解我希望它分配给什么,以及它如何覆盖一个输出的多个观察值?@Tykid15。您必须为每个键创建值,即
c(“未来固定收益”、“利率掉期”)
和'c(“衍生品”、“衍生品”)即,要替换的每个元素的每一行。其思想是键是唯一的,而值可以相同。它可以工作,但不会在原始数据集上创建列。加载时仍然没有类型列。您知道可能发生这种情况的原因吗?@Tykid15是否将结果分配回?
axa%mutate(类型=当(…..