r - 根据其他两个变量在数据框中创建一个新变量
问题描述
我有一个大数据框,想创建一个依赖于其他两个变量的新变量。
这是一个简短的例子:
v1 <- rep(c(1:5),each=3)
v2 <- c('X','A','Y','X','Y','B','X','Y','C','X','Y','C','X','Y','A')
dat <- data.frame(v1,v2)
#create a new var which contains either A,B, or C depending on what is found in v2
#desired output
v3 <- rep(c('A','B','C','C','A'),each=3)
data.frame(v1,v2,v3)
关于如何使用短代码执行此操作的任何想法?
我试过这个,但它远非解决方案。遗漏太多。:(
dat$v3[dat$v2 %in% c('A','B','C')] <- dat$v2[dat$v2 %in% c('A','B','C')]
解决方案
library(tidyverse)
dat %>% group_by(v1) %>% mutate(v3 = intersect(v2, c("A", "B", "C")))
# A tibble: 15 x 3
# Groups: v1 [5]
# v1 v2 v3
# <int> <fct> <chr>
# 1 1 X A
# 2 1 A A
# 3 1 Y A
# 4 2 X B
# 5 2 Y B
# 6 2 B B
# 7 3 X C
# 8 3 Y C
# 9 3 C C
# 10 4 X C
# 11 4 Y C
# 12 4 C C
# 13 5 X A
# 14 5 Y A
# 15 5 A A
这是假设只有 A、B、C 中的一个可以出现在由 给出的组中v1
。
推荐阅读
- r - 如何使用 R 将复杂文本分成单独的列?
- docusaurus - 如何更改 Docusaurus 登陆页面的背景图片?
- r - 如何摆脱原始向量上的嵌入式 NUL?
- delphi - 德尔福 IDE 和 UNC
- python - 向量化嵌套 vmap
- python - 如何将元音字母之后的字母附加到列表中?
- c# - .net 核心 wpf 应用程序,用于下载视频流并在数据到达后立即处理
- reactjs - 使用 socket.io 将新的数组更改应用到 useEffect 并更改流
- go - 将 WireGuard 嵌入到 Windows 上的 Go 应用程序中
- palantir-foundry - 如何将许多不同的模式合并到一个输出中,以便以后可以动态旋转?