我不知道我的问题标题是否有意义。我正在尝试编写代码,将计数替换为列的名称。例如,如果一个观察值的计数为2,则该观察值的ID变为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
答案 0 :(得分:3)
一个选择是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
答案 1 :(得分:0)
我们可以在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
答案 2 :(得分:0)
单线:
library(reshape2)
dd <- data.frame(ID = rep(melt(df)$ID, melt(df)$value),
Items = rep(melt(df)$variable,melt(df)$value)
)