R 使用“聚集”堆栈列并引入新的因子类型
我有一个非常简单的R 使用“聚集”堆栈列并引入新的因子类型,r,dplyr,tidyr,R,Dplyr,Tidyr,我有一个非常简单的df1,看起来像这样 library(dplyr) library(tidyr) df1<-data.frame( G=c(1,1,1,1,1,1,1,2,2,2,2,2,2,2), I=c(1,2,3,4,5,6,7,1,2,3,4,5,6,7), X1=c( 0.043, 0.055,-0.060, 0.046, 0.140, 0.036, 0.045, 0.034, 0.032, 0.030, 0.029, 0.032, 0.03
df1
,看起来像这样
library(dplyr)
library(tidyr)
df1<-data.frame(
G=c(1,1,1,1,1,1,1,2,2,2,2,2,2,2),
I=c(1,2,3,4,5,6,7,1,2,3,4,5,6,7),
X1=c( 0.043, 0.055,-0.060, 0.046, 0.140, 0.036, 0.045, 0.034, 0.032, 0.030, 0.029, 0.032, 0.032, 0.036),
Y1=c(-0.422, -0.554,-0.426, -0.538, -0.446, -0.654, -0.437, -0.424, -0.416, -0.410, -0.411, -0.424, -0.397, -0.403),
X2=c( 0.035 , 0.035, 0.023, 0.033, 0.040, 0.032, 0.036, 0.035, 0.035, 0.023, 0.033, 0.040, 0.032, 0.036),
Y2=c(-0.420, -0.427,-0.409, -0.421, -0.422, -0.420, -0.402, -0.420, -0.427, -0.409, -0.421, -0.422, -0.420, -0.402)
)
我的第一次尝试是使用以下内容:
df2 <- df1 %>%
gather(X1, X2, key = TypeX, value = Xs) %>%
gather(Y1, Y2, key = TypeY, value = Ys)
df2%
聚集(X1,X2,key=TypeX,value=Xs)%>%
聚集(Y1,Y2,键=TypeY,值=Ys)
这接近我想要的,但实际上不是我真正想要的
我可以使用just gather实现此行为,还是需要其他功能 您的问题可以通过使用
dplyr
包重命名和绑定行来解决
df %>%
select(G, I, "X_a" = X1, "Y_a" = Y1) %>%
bind_rows(
df %>%
filter(G == 1) %>%
mutate(G = 3) %>%
select(G, I, "X_a" = X2, "Y_a" = Y2)
)
# G I X_a Y_a
# 1 1 1 0.043 -0.422
# 2 1 2 0.055 -0.554
# 3 1 3 -0.060 -0.426
# 4 1 4 0.046 -0.538
# 5 1 5 0.140 -0.446
# 6 1 6 0.036 -0.654
# 7 1 7 0.045 -0.437
# 8 2 1 0.034 -0.424
# 9 2 2 0.032 -0.416
# 10 2 3 0.030 -0.410
# 11 2 4 0.029 -0.411
# 12 2 5 0.032 -0.424
# 13 2 6 0.032 -0.397
# 14 2 7 0.036 -0.403
# 15 3 1 0.035 -0.420
# 16 3 2 0.035 -0.427
# 17 3 3 0.023 -0.409
# 18 3 4 0.033 -0.421
# 19 3 5 0.040 -0.422
# 20 3 6 0.032 -0.420
# 21 3 7 0.036 -0.402
N.B.我假设对于G==3
fromX2
和Y2
的结果对于G==1&G==2
fromI==1:7
非常酷的解决方案。似乎有效,但与我的真实例子不同
G
是我的一个因素。任何想法,我怎么能解决它<无法修改代码>列G,因为它是一个分组变量由于此解决方案不需要分组,请在之前使用ungroup()
(由于以前的转换,数据似乎仍然分组)。抱歉。我发现了我的错误。我只需要应用ungroup()
behorefand。事实上,我的数据已经是不可编辑的了。我刚刚用levels()
添加了一个额外的级别3,并将mutate(BG=3)
更改为mutate(BG=factor(3))
。
df %>%
select(G, I, "X_a" = X1, "Y_a" = Y1) %>%
bind_rows(
df %>%
filter(G == 1) %>%
mutate(G = 3) %>%
select(G, I, "X_a" = X2, "Y_a" = Y2)
)
# G I X_a Y_a
# 1 1 1 0.043 -0.422
# 2 1 2 0.055 -0.554
# 3 1 3 -0.060 -0.426
# 4 1 4 0.046 -0.538
# 5 1 5 0.140 -0.446
# 6 1 6 0.036 -0.654
# 7 1 7 0.045 -0.437
# 8 2 1 0.034 -0.424
# 9 2 2 0.032 -0.416
# 10 2 3 0.030 -0.410
# 11 2 4 0.029 -0.411
# 12 2 5 0.032 -0.424
# 13 2 6 0.032 -0.397
# 14 2 7 0.036 -0.403
# 15 3 1 0.035 -0.420
# 16 3 2 0.035 -0.427
# 17 3 3 0.023 -0.409
# 18 3 4 0.033 -0.421
# 19 3 5 0.040 -0.422
# 20 3 6 0.032 -0.420
# 21 3 7 0.036 -0.402