r - 通过使用管道复制和替换变量来扩展 R 中的数据框
问题描述
我想使用以下方式扩展数据框:
GX
将被三个不同的变量替换Gs = (G4, G5, G6
)什么都将保留GX
. 对于每个新行,必须复制Gs
当前行,并将名称替换为相应的名称。GX
GX
Gs
set.seed(123)
df = data.frame(
"id" = c(rep("G1", 3), rep("G2", 3), rep("G3", 3), rep("GX",3)),
"subgroup" = rep(c(1,2,3), 4),
"total" = sample.int(n = 12),
"C1" = sample.int(n=12),
"C2" = sample.int(n=12),
"C3" = sample.int(n=12))
id subgroup total C1 C2 C3
1 G1 1 3 11 9 9
2 G1 2 12 5 3 12
3 G1 3 10 3 4 10
4 G2 1 2 9 1 7
5 G2 2 6 4 11 3
6 G2 3 11 1 7 4
7 G3 1 5 7 5 5
8 G3 2 4 12 10 6
9 G3 3 9 10 8 8
10 GX 1 8 2 2 2
11 GX 2 1 6 12 1
12 GX 3 7 8 6 11
我有一个解决方案,其中包括for loop
:
Gs = c("G4", "G5", "G6")
for (ii in 1:length(Gs)) {
tmp.df <- df[df$id == "GX",]
tmp.df$id <- gsub(
pattern = "GX",
replacement = Gs[ii],
x = tmp.df$id
)
df <- rbind(df, tmp.df)
}
df = df[df$id != "GX",]
这使:
id subgroup total C1 C2 C3
1 G1 1 3 11 9 9
2 G1 2 12 5 3 12
3 G1 3 10 3 4 10
4 G2 1 2 9 1 7
5 G2 2 6 4 11 3
6 G2 3 11 1 7 4
7 G3 1 5 7 5 5
8 G3 2 4 12 10 6
9 G3 3 9 10 8 8
101 G4 1 8 2 2 2
111 G4 2 1 6 12 1
121 G4 3 7 8 6 11
102 G5 1 8 2 2 2
112 G5 2 1 6 12 1
122 G5 3 7 8 6 11
103 G6 1 8 2 2 2
113 G6 2 1 6 12 1
123 G6 3 7 8 6 11
但是,我想将解决方案包含在管道中并避免for loop
解决方案。是否有更多使用tidyverse 语法的 R 时尚方法包含在管道中?
谢谢
解决方案
我们只能选择其中的行id == 'GX'
,创建它的所有组合Gs
并将原始数据框绑定到它删除'Gx'
行。
library(dplyr)
df %>%
filter(id == 'GX') %>%
tidyr::crossing(Gs) %>%
select(-id, id = Gs) %>%
bind_rows(df, .) %>%
filter(id != 'GX')
# id subgroup total C1 C2 C3
#1 G1 1 3 11 9 9
#2 G1 2 12 5 3 12
#3 G1 3 10 3 4 10
#4 G2 1 2 9 1 7
#5 G2 2 6 4 11 3
#6 G2 3 11 1 7 4
#7 G3 1 5 7 5 5
#8 G3 2 4 12 10 6
#9 G3 3 9 10 8 8
#10 G4 1 8 2 2 2
#11 G5 1 8 2 2 2
#12 G6 1 8 2 2 2
#13 G4 2 1 6 12 1
#14 G5 2 1 6 12 1
#15 G6 2 1 6 12 1
#16 G4 3 7 8 6 11
#17 G5 3 7 8 6 11
#18 G6 3 7 8 6 11
推荐阅读
- javascript - 使用 IFormFile 通过 JS 上传文件到 ASP.Net Core
- python - 恼人的 yfinance 错误和与 numpy/pandas 的不兼容
- java - 为数组字典创建一个类,但这是我第一次使用 bufferedreader
- java - 错误无法在运行应用程序时在 android studio 中创建目录 ~\.android\.android
- c# - 为什么这个字节没有改变?
- php - 如何将缺货产品转移到垃圾 Woocommerce?
- c - 如果结构变量在c中的const enum中,如何为结构变量赋值
- apache-camel - 从 ActiveMQ 到 HTTP 服务的 Apache Camel 路由
- python - 通过 SQLlite 访问 Gapminder
- grep - list --full-time with ls 和一个文件列表