r - if else 循环创建一个新的分类变量
问题描述
我想获得一个lastocc
值为 1 和 2 的新变量。lastocc
如果每个单词的最后一次出现也以相同的颜色显示,则该变量应显示为每个单词。
因此,如果特定单词现在和以前以相同的颜色显示,则应将其编码为 1。如果在最后一次出现时以不同的颜色显示,则应将其编码为 2。
例如:
trial word color lastocc
1 warm red
2 klein blue
3 ganz yellow
4 warm red 1
5 klein red 2
6 ganz yellow 1
7 klein red 1
我尝试了这段代码,但它不起作用:
data_expblocks$lastocc <- if (data_expblocks$word == TRUE & data_expblocks$color == TRUE) {lastocc = 1}
else { lastocc =2 }
更高级的是 dput() =
structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), Word = c("XXXX", "XXXX", "warm", "klein", "klein", "warm",
"ganz", "warm", "leicht", "ganz"), Colour = c("YELLOW", "RED",
"RED", "RED", "RED", "RED", "RED", "YELLOW", "RED", "YELLOW")), row.names = 53:62, class = "data.frame")
如果你能给我一些建议就好了。谢谢你!
解决方案
这是使用dplyr
包的一种方法。
首先,用于group_by
查看给定主题的每个单词。行之间的唯一区别应该是Colour
.
然后,您可以使用它mutate
来创建一个新列。使用ifelse
is 将评估Colour
给定行的 是否与上一个相同Colour
。如果是,则值为 1。如果不是,则为 2。如果没有可用的先前值(第一次出现单词),则为NA
。
library(dplyr)
data_expblocks %>%
group_by(Subject, Word) %>%
mutate(lastocc = ifelse(Colour == lag(Colour), 1, 2))
输出
Subject Word Colour lastocc
<int> <chr> <chr> <dbl>
1 1 XXXX YELLOW NA
2 1 XXXX RED 2
3 1 warm RED NA
4 1 klein RED NA
5 1 klein RED 1
6 1 warm RED 1
7 1 ganz RED NA
8 1 warm YELLOW 2
9 1 leicht RED NA
10 1 ganz YELLOW 2
推荐阅读
- javascript - Angular JS - 基于 JSON 生成复选框和文本框
- rest - 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查
- c - 如何将嵌入式 C 中的类型用于便携式裸机软件
- android - RTL OS 中 LTR 文本开头呈现的标点符号
- python - 在 datetime 中,为什么 `year` 是一个属性,而 `weekday()` 是一个函数?
- c - 如何将 Zlib 与 Cmake 链接
- r - 根据表格生成每日收入
- android - 标签没有显示出来
- android - android支持不同分辨率的布局文件夹
- spring - Spring webflux:当响应之一有数据时并行调用和取消/返回