使用以下多个标头类型重新组织数据帧;“整洁”;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