从查找表创建新变量

Bur*_*ter 7 r dataframe

我的数据集中有以下列:

presult     aresult
  I         single
  I         double
  I         triple
  I         home run
  SS        strikeout
Run Code Online (Sandbox Code Playgroud)

我想添加第三列"基础",这取决于列issult中结果的值.

例如,我希望基数为1表示单个,2表示双重,3表示三重,4表示本垒打,0表示删除.

通常我会像这样创建新变量:

dataset$base<-ifelse(dataset$aresult=="single", 1, 0)
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何在不将所有其他变量设置为零的情况下编写新变量.

And*_*rie 16

以下是如何使用命名向量进行查找:

定义测试数据:

dat <- data.frame(
    presult = c(rep("I", 4), "SS", "ZZ"),
    aresult = c("single", "double", "triple", "home run", "strikeout", "home run"),
    stringsAsFactors=FALSE
)
Run Code Online (Sandbox Code Playgroud)

使用分数定义命名的数字向量:

score <- c(single=1, double=2, triple=3, `home run`=4,  strikeout=0)
Run Code Online (Sandbox Code Playgroud)

使用矢量索引将分数与结果进行匹配:

dat$base <- score[dat$aresult]
dat
  presult   aresult base
1       I    single    1
2       I    double    2
3       I    triple    3
4       I  home run    4
5      SS strikeout    0
6      ZZ  home run    4
Run Code Online (Sandbox Code Playgroud)

附加信息:

如果您不希望手动构造命名向量,请说明在您有大量数据的情况下,请按以下步骤操作:

scores <- c(1:4, 5)
names(scores) <- c("single", "double", "triple", "home run", "strikeout")
Run Code Online (Sandbox Code Playgroud)

(或者从现有数据中读取值和名称.重点是构造一个数字向量,然后指定名称.)

  • +1使用命名向量的好主意.希望我多年前见过/想过这个! (2认同)

Lou*_*fre 15

定义您的查找表

lookup= data.frame( 
        base=c(0,1,2,3,4), 
        aresult=c("strikeout","single","double","triple","home run"))
Run Code Online (Sandbox Code Playgroud)

然后使用plyr的join

dataset = join(dataset,lookup,by='aresult')
Run Code Online (Sandbox Code Playgroud)