使用以下多个标头类型重新组织数据帧;“整洁”;R中的方法

使用以下多个标头类型重新组织数据帧;“整洁”;R中的方法,r,tidyr,tidyverse,R,Tidyr,Tidyverse,我有一个数据帧,看起来有点像这样: Age A1U_sweet A2F_dip A3U_bbq C1U_sweet C2F_dip C3U_bbq Comments 23 1 2 1 NA NA NA Good 54 NA NA NA 4 1 2 ABCD 43 2 4

我有一个数据帧,看起来有点像这样:

Age  A1U_sweet  A2F_dip  A3U_bbq  C1U_sweet  C2F_dip  C3U_bbq  Comments
23   1          2        1        NA         NA       NA       Good
54   NA         NA       NA       4          1        2        ABCD
43   2          4        7        NA         NA       NA       HiHi
我正试图以如下所示的方式重新组织它,使它更“整洁”。有没有一种方法可以让我做到这一点,即以与下面其他变量相同的样式合并Age和Comments列?你会如何建议合并它们-一个想法如下所示,但我愿意接受其他建议。如何修改以下代码以考虑多种不同样式的列名

library(tidyr)

df <- data.frame(id = 1:nrow(df), df)
dfl <- gather(df, key = "key", value = "value", -id)
dfl <- separate(dfl, key, into = c("key", "kind", "type"), sep = c(1, 4))
df2 <- spread(dfl, key, value)
df2
##   id kind  type     A    C
## 1  1  Age   Age    23   23
## 2  1  1U_ sweet     1   NA
## 3  1  2F_   dip     2   NA
## 4  1  3U_   bbq     1   NA
## 5  1  Com   Com  Good Good
## 6  2  Age   Age    54   54
## 7  2  1U_ sweet    NA    4
## 8  2  2F_   dip    NA    1
## 9  2  3U_   bbq    NA    2
##10  2  Com   Com  ABCD ABCD
##11  3  Age   Age    43   43
##12  3  1U_ sweet     2   NA
##13  3  2F_   dip     4   NA
##14  3  3U_   bbq     7   NA
##15  3  Com   Com  HiHi HiHi
library(tidyr)

df由于
年龄
评论
可能是在原始数据中的任何一行的水平上进行测量的,因此只需将它们带到车上即可:

df <- data.frame(id = 1:nrow(df), df)

dfl <- gather(df, key = "key", value = "value", -id, -Age, -Comments)
dfl <- separate(dfl, key, into = c("key", "kind", "type"), sep = c(1, 4))
df2 <- spread(dfl, key, value)
df2

df2 <- transform(df2, B = ifelse(is.na(A), C, A))
df2

df <- gather(df2, key = "key", value = "value", A, B, C)
df <- unite(df, "key", key, kind, type, sep = "")
df <- spread(df, key, value)
df

df您在YRU数据中的
年龄和
注释在哪里?我不明白你在说什么。你能澄清一下吗?正如@jazzurro所提到的,关于
年龄
糖果
还不清楚。请使用预期输出更新您的示例您尝试了什么?什么不符合要求?最好改进你的问题。要求社区对示例中未包含的数据进行评论是不礼貌的。我已经更新了数据框架以反映这些评论。我还包括了一个问题的链接,其中包含了Ista最初提出这个问题的评论。谢谢你的反馈。
df <- data.frame(id = 1:nrow(df), df)

dfl <- gather(df, key = "key", value = "value", -id, -Age, -Comments)
dfl <- separate(dfl, key, into = c("key", "kind", "type"), sep = c(1, 4))
df2 <- spread(dfl, key, value)
df2

df2 <- transform(df2, B = ifelse(is.na(A), C, A))
df2

df <- gather(df2, key = "key", value = "value", A, B, C)
df <- unite(df, "key", key, kind, type, sep = "")
df <- spread(df, key, value)
df