R 使用现有数据创建新数据框

R 使用现有数据创建新数据框,r,for-loop,R,For Loop,我想从我现有的数据框“ab”中创建一个新数据。新的数据帧应该看起来像“Newdf” a比dplyr更重要的是,您需要tidyr: library(tidyr) library(dplyr) ab %>% gather(Comp, DV) %>% mutate(Comp = recode(Comp, "C1" = 1, "c2" = 2)) # Comp DV # 1 1 1 # 2 1 2 # 3 1 3 # 4 1 4 #

我想从我现有的数据框“ab”中创建一个新数据。新的数据帧应该看起来像“Newdf”


a比
dplyr
更重要的是,您需要
tidyr

library(tidyr)
library(dplyr)
ab %>% 
  gather(Comp, DV) %>% 
  mutate(Comp = recode(Comp, "C1" = 1, "c2" = 2))
#    Comp DV
# 1     1  1
# 2     1  2
# 3     1  3
# 4     1  4
# 5     1  5
# 6     2 11
# 7     2 12
# 8     2 13
# 9     2 14
# 10    2 15

使用
dplyr
tidyr
可以让您接近

library(tidyr)
library(dplyr)
df2 <- ab %>% 
       mutate(Order=1:n()) %>% 
       gather(key=Comp,value=DV,C1,c2) %>% 
       arrange(Order) %>% 
       mutate(Comp=recode(Comp,"C1"=1,"c2"=2)) %>% 
       select(DV,Comp)

df2
   DV Comp
1   1    1
2  11    2
3   2    1
4  12    2
5   3    1
6  13    2
7   4    1
8  14    2
9   5    1
10 15    2
library(tidyr)
图书馆(dplyr)
df2%
变异(顺序=1:n())%>%
聚集(键=Comp,值=DV,C1,c2)%>%
安排(订单)%>%
变异(Comp=重新编码(Comp,“C1”=1,“c2”=2))%>%
选择(DV、Comp)
df2
DV补偿
1   1    1
2  11    2
3   2    1
4  12    2
5   3    1
6  13    2
7   4    1
8  14    2
9   5    1
10 15    2

虽然OP要求提供
dpylr
解决方案,但我觉得寻找
数据表
解决方案是一个挑战。因此,FWIW,这里有一种使用
melt()
的替代方法

请注意,此解决方案不像其他两个
dplyr
解决方案那样依赖于
ab
中的特定列名。此外,它还应适用于
ab
中的两列以上(未测试)

数据
ab尝试
c(t(ab))
…被接受的答案不是你在问题中想要的。你需要在你的问题上更加具体。这不是他们要求的结果。我同意这不完全是他们要求的。在我自己的分析中,行(或列)的顺序通常并不重要。当它出现时,它就是一面红旗。让我先澄清一下。我讨厌自己的回答。但是@AndrewGustar已经给出了这个问题的答案,没有你所说的任何“解释”。这个答案借用了我的答案,这很好。我也不确定你的意思,理想的做法是编辑他们的问题。更奇怪的是,他们手写了预期的输出。再清楚不过了
library(tidyr)
library(dplyr)
df2 <- ab %>% 
       mutate(Order=1:n()) %>% 
       gather(key=Comp,value=DV,C1,c2) %>% 
       arrange(Order) %>% 
       mutate(Comp=recode(Comp,"C1"=1,"c2"=2)) %>% 
       select(DV,Comp)

df2
   DV Comp
1   1    1
2  11    2
3   2    1
4  12    2
5   3    1
6  13    2
7   4    1
8  14    2
9   5    1
10 15    2
library(data.table)
melt(setDT(ab, keep.rownames = TRUE), id.vars = "rn", value.name = "DV"
     )[, Comp := rleid(variable)
       ][order(rn)][, c("rn", "variable") := NULL][]
#    DV Comp
# 1:  1    1
# 2: 11    2
# 3:  2    1
# 4: 12    2
# 5:  3    1
# 6: 13    2
# 7:  4    1
# 8: 14    2
# 9:  5    1
#10: 15    2
ab <- structure(list(C1 = 1:5, c2 = 11:15), .Names = c("C1", "c2"), 
  row.names = c(NA, -5L), class = "data.frame")
ab
#  C1 c2
#1  1 11
#2  2 12
#3  3 13
#4  4 14
#5  5 15