R 使用现有数据创建新数据框
我想从我现有的数据框“ab”中创建一个新数据。新的数据帧应该看起来像“Newdf”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 #
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