R 改变数据帧的结构

R 改变数据帧的结构,r,dataframe,transform,R,Dataframe,Transform,这是当前的数据帧结构 value. blue red 1 -1.22049503 -0.62733486 2 1.61641224 0.43102051 3 0.09079087 0.61619844 4 0.32325956 -0.17718356 想把它改成 value.

这是当前的数据帧结构

value.           blue         red
1                   -1.22049503   -0.62733486
2                    1.61641224   0.43102051
3                    0.09079087   0.61619844
4                    0.32325956   -0.17718356 
想把它改成

value.               number       color
1                   -1.22049503   blue
1                   -0.62733486    red
2                    1.61641224   blue
2                    0.43102051    red
3                    0.09079087   blue
3                    0.61619844    red
4                    0.32325956   blue
4                   -0.17718356    red

我看到了这个问题,它的作用是相反的

tidyr::gather
就可以了。假设数据帧命名为
df1

library(tidyr)
df1 %>% 
  gather(color, number, -value.)
如果希望结果按
值排序。
如示例所示,请添加
dplyr::arrange

library(tidyr)
library(dplyr)
df1 %>% 
  gather(color, number, -value.) %>%
  arrange(value.)

@d、 b的评论和@neilfws的回答都很好。还有一种方法:

library(dplyr)

df <- data.frame(
  value = c(1, 2, 3),
  blue = c(10, 30, 50),
  red = c(20, 40, 60)
)

df2 <- data.frame(
  value = rep(1:nrow(df), each = 2),
  color = rep(c("blue", "red"), nrow(df))
) %>%
  mutate(number = if_else(color == "blue", df$blue[value], df$red[value]))
库(dplyr)

df
reforme2::melt(data=df1,id.vars=c(“value”)),variable.name=“color”,value.name=“number”)
@d.b谢谢,如果还有其他列,这会起作用吗?@johnsmith0您可以用我们的数据帧头(10)进行测试这会从头创建一个数据帧,我完全同意,但会保留它,因为它提供了一些直觉。