Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于其他列值将列值转换为行_R_Dplyr - Fatal编程技术网

R 如何基于其他列值将列值转换为行

R 如何基于其他列值将列值转换为行,r,dplyr,R,Dplyr,基本上,我想在一列中取数值,以在其他列中复制或传播分类值 我有这样的想法: df <- data.frame(a = c(1:3), b = c(2:4), c = c(1:3), d = c("cow", "moose", "chicken")) # > df # a b c d # 1 1 2 3 cow # 2 2 3 4 moose # 3 3 4 5 chicke

基本上,我想在一列中取数值,以在其他列中复制或传播分类值

我有这样的想法:

df <- data.frame(a = c(1:3), 
             b = c(2:4), 
             c = c(1:3), 
             d = c("cow", "moose", "chicken"))
# > df
#   a b c       d
# 1 1 2 3     cow
# 2 2 3 4   moose
# 3 3 4 5 chicken
df2 <- data.frame(col1, col2)
col1 <- c("a", "b", "b", "c", "c", "c", "a","a")
col2 <- c( "cow", "cow", "cow", "cow", "cow", "cow", "moose", "moose")

# > df2
#   col1  col2
# 1    a   cow
# 2    b   cow
# 3    b   cow
# 4    c   cow
# 5    c   cow
# 6    c   cow
# 7    a moose
# 8    a moose ....and so on.
df
#a、b、c、d
#1 12 3头牛
#2 2 3 4驼鹿
#3 3 4 5只鸡
我想要这样的东西:

df <- data.frame(a = c(1:3), 
             b = c(2:4), 
             c = c(1:3), 
             d = c("cow", "moose", "chicken"))
# > df
#   a b c       d
# 1 1 2 3     cow
# 2 2 3 4   moose
# 3 3 4 5 chicken
df2 <- data.frame(col1, col2)
col1 <- c("a", "b", "b", "c", "c", "c", "a","a")
col2 <- c( "cow", "cow", "cow", "cow", "cow", "cow", "moose", "moose")

# > df2
#   col1  col2
# 1    a   cow
# 2    b   cow
# 3    b   cow
# 4    c   cow
# 5    c   cow
# 6    c   cow
# 7    a moose
# 8    a moose ....and so on.

df2这里有一个选项,它使用
tidyr
collect
将数据从宽格式重新保存到长格式,并从
splitstackshape
扩展行
扩展数据帧的行

library(splitstackshape)
library(tidyr)
df %>% 
  gather(key, value, -d) %>% 
  expandRows(., count = 'value')
#          d key
#1       cow   a
#2     moose   a
#2.1   moose   a
#3   chicken   a
#3.1 chicken   a
#3.2 chicken   a
#4       cow   b
#4.1     cow   b
#5     moose   b
#5.1   moose   b
#5.2   moose   b
#6   chicken   b
#6.1 chicken   b
#6.2 chicken   b
#6.3 chicken   b
#7       cow   c
#8     moose   c
#8.1   moose   c
#9   chicken   c
#9.1 chicken   c
#9.2 chicken   c
数据

df <- data.frame(a = c(1:3), 
                 b = c(2:4), 
                 c = c(1:3), 
                 d = c("cow", "moose", "chicken"))

df这里有一个带有
数据的选项。表

library(data.table)
melt(setDT(df), id.var = 'd', variable.name = 'key'
       )[rep(seq_len(.N), value)][, value := NULL][]
#          d key
# 1:     cow   a
# 2:   moose   a
# 3:   moose   a
# 4: chicken   a
# 5: chicken   a
# 6: chicken   a
# 7:     cow   b
# 8:     cow   b
# 9:   moose   b
#10:   moose   b
#11:   moose   b
#12: chicken   b
#13: chicken   b
#14: chicken   b
#15: chicken   b
#16:     cow   c
#17:   moose   c
#18:   moose   c
#19: chicken   c
#20: chicken   c
#21: chicken   c

谢谢,这对我的示例和实际数据帧非常有效。不过,我想知道您是否知道如何调整它以基于多个列进行扩展。例如,如果我有另一个像“d”这样的列,并且对于每一行,我都会用行d和新的分类列“e”的所有组合展开(假设)。我可以修改下面的答案来实现这一点,但用tidyr无法解决。@Tyler你能编辑你的问题并给出一个预期输出的最小工作示例吗?