我的数据集中有以下列:
presult aresult
I single
I double
I triple
I home run
SS strikeout
我想添加第三列“bases”,它取决于列结果中结果的值。
例如,我希望单垒为 1,双垒为 2,三垒为 3,本垒打为 4,三振出垒为 0。
通常我会像这样创建新变量:
dataset$base<-ifelse(dataset$aresult=="single", 1, 0)
问题是我不知道如何在不将所有其他变量设置为零的情况下对新变量进行编码。
最佳答案
以下是如何使用命名向量进行查找:
定义测试数据:
dat <- data.frame(
presult = c(rep("I", 4), "SS", "ZZ"),
aresult = c("single", "double", "triple", "home run", "strikeout", "home run"),
stringsAsFactors=FALSE
)
用分数定义一个命名的数字向量:
score <- c(single=1, double=2, triple=3, `home run`=4, strikeout=0)
使用向量索引将分数与结果进行匹配:
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
附加信息:
如果你不想手工构造命名向量,比如你有大量数据的情况,那么按照如下方式进行:
scores <- c(1:4, 5)
names(scores) <- c("single", "double", "triple", "home run", "strikeout")
(或者从现有数据中读取值和名称。重点是构造一个数值向量,然后分配名称。)
关于r - 从查找表创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8433523/