![](/img/trans.png)
[英]How to compute a new variable in R based on values of multiple other variables?
[英]How to compute a new variable that is defined by two variables using R?
我有一个包含变量sex
和navigation
的数据集。 sex
变量具有male
和female
作为值。 “导航”变量具有menu
和tags
作为值。
我想使用值male_menu
, male_tags
, female_menu
和female_tags
创建一个新变量,因为它们是两个现有变量的可能组合。
如何在R
创建这样的新变量并将其包含在原始数据集中?
我了解您想要的内容与@zach有所不同。 在这里,我使用interaction
功能使用您指定的四个级别创建一个新因子。 这里使用一些伪数据
set.seed(42)
sex <- sample(c("Male","Female"), 20, replace = TRUE)
navigation <- sample(c("menu","tags"), 20, replace = TRUE)
interaction(sex, navigation)
最后一行给出
> interaction(sex, navigation)
[1] Female.tags Female.menu Male.tags Female.tags Female.menu Female.tags
[7] Female.menu Male.tags Female.menu Female.tags Male.tags Female.tags
[13] Female.menu Male.tags Male.menu Female.tags Female.menu Male.menu
[19] Male.tags Female.tags
Levels: Female.menu Male.menu Female.tags Male.tags
那是你想要的吗?
听起来您正在为模型创建虚拟变量。 这是使用model.matrix
做到这一点的简单方法:
dat <- iris
dat$navigation <- sample(c('menu', 'tags'), nrow(dat), replace=TRUE)
newdat <- data.frame(model.matrix(~0+.+Species*navigation, dat))
> head(newdat)
Sepal.Length Sepal.Width Petal.Length Petal.Width Speciessetosa
1 5.1 3.5 1.4 0.2 1
2 4.9 3.0 1.4 0.2 1
3 4.7 3.2 1.3 0.2 1
4 4.6 3.1 1.5 0.2 1
5 5.0 3.6 1.4 0.2 1
6 5.4 3.9 1.7 0.4 1
Speciesversicolor Speciesvirginica navigationtags
1 0 0 0
2 0 0 1
3 0 0 0
4 0 0 0
5 0 0 1
6 0 0 0
Speciesversicolor:navigationtags Speciesvirginica:navigationtags
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
如果由于某种原因您不想降低参考水平,则可以在caret中使用dummyVars
函数。
只是作为另一个选择,您还可以使用paste
。
your_data$sex_navigation <- with(your_data, paste(sex, navigation, sep = "_"))
当然,您可以通过将其包装在factor()
中将其强制转换为一个因素。 此方法与interaction
方法之间的主要区别在于, interaction
将创建一个因素,其中级别包括所有可能的交互,无论它们是否存在。 factor(paste())
方法将仅包括存在的水平。 我发现interaction
通常更可取,但是我经常想要paste
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.