繁体   English   中英

如何使用R计算由两个变量定义的新变量?

[英]How to compute a new variable that is defined by two variables using R?

我有一个包含变量sexnavigation的数据集。 sex变量具有malefemale作为值。 “导航”变量具有menutags作为值。

我想使用值male_menumale_tagsfemale_menufemale_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM