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你能编辑你的问题并给出一个预期输出的最小工作示例吗?