我不知道我对这个问题的称呼是否合理。我正在尝试编写一个代码,将计数替换为列的名称。例如,如果一个观察的计数为2,则该观察的Id为2,其列名称为2,而不是计数。下表显示了如果我的解释没有意义的话,我想要什么。
这是我的表(代码):
df <- structure(list(ID = c("P40", "P41", "P43"),
Fruit = c(2, 2, 1),
Snack = c(2, 1, 1)),
class = "data.frame", row.names = c(NA, -3L))表:
ID Fruit Snack
P40 2 2
P41 2 1
P43 1 1
This is what i want to achieve:
ID Items
P40 Fruit
P40 Fruit
P40 Snack
P40 Snack
P41 Fruit
P41 Fruit
P41 Snack
P43 Fruit
P43 Snack发布于 2019-07-26 11:45:00
一种选择是gather和uncount
library(dplyr)
library(tidyr)
df %>%
gather(key, value, -ID) %>%
uncount(value)
# ID key
#1 P40 Fruit
#1.1 P40 Fruit
#2 P41 Fruit
#2.1 P41 Fruit
#3 P43 Fruit
#4 P40 Snack
#4.1 P40 Snack
#5 P41 Snack
#6 P43 Snack发布于 2019-07-26 13:27:31
我们可以在base R中这样做,方法是对除第一个列之外的列进行unlist,然后使用列的值对行序列进行rep许可,以扩展数据。
df1 <- data.frame(ID = df[,1], Items = unlist(df[-1], use.names = FALSE))
df1[rep(seq_len(nrow(df1)), df1$Items),]
#. ID Items
#1 P40 2
#1.1 P40 2
#2 P41 2
#2.1 P41 2
#3 P43 1
#4 P40 2
#4.1 P40 2
#5 P41 1
#6 P43 1发布于 2019-07-26 13:43:46
一条单线:
library(reshape2)
dd <- data.frame(ID = rep(melt(df)$ID, melt(df)$value),
Items = rep(melt(df)$variable,melt(df)$value)
)https://stackoverflow.com/questions/57219370
复制相似问题